Обеспечить легкий вход для вашего клиента.

_00 / Концепция

Цель состоит в том, чтобы предоставить конечным пользователям простой интерфейс. Как вашим пользователям, им не нужно знать, насколько сложной будет логика. Опять же, вы можете взять SDK в качестве примера. SDK должен быть под рукой, даже если пользователи не знают базового кода.

_01 / Ключевые роли

В следующем примере кода браузер будет инкапсулировать подробную логику работы в Интернете. Пользователь может сосредоточиться на том, что он хочет, а не на логике браузера.

// encapsulate the logic
class Browser {
  ...
  constructor(DNS, TCP, HTTP, DOM) {
    this.DNS = DNS
    this.TCP = TCP
    this.HTTP = HTTP
    this.DOM = DOM
  }
  go(url) {
    this.DNS.search(url)
    this.TCP.connect()
    this.HTTP.connect()
    this.DOM.render()
  }
}
// client
const browser = new Browser(...)
browser.go("https://www.google.com/")

_02 / Компромиссы

🟢 Простота в использовании для клиента, довольно дружественный.
🟢 Изолируйте свою подсистему.
🔴 Добавив больше вещей, вы создадите богоподобный класс.
🔴 У вас будет несколько причин для модификации твой бог как класс.