Очень полезно делать свои обëртки для подключаемого извне кода.

Это один из моих любимых приëмов.

Он очень простой и мгновенно начинает приносить пользу.

Подключаем компонент

Например, мы подключили компонент Beanstalk для работы с сервером Beanstalk.

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

При обращении к компоненту, наш код будет вызывать класс из вендора.

В принципе, этого вполне достаточно чтобы код работал, и работать с компонентом напрямую вполне удобно.

Но что если мы создадим в своëм коде приложения класс-обëртку, как прослойку между нашим приложением и компонентом?

Делаем обёртку

Обёртка компонента

Теперь любой код приложения будет обращаться не к компоненту а к нашей обëртке, и будет целиком изолирован от компонента.

Сам класс обёртки обращается всё к тому же компоненту. Но код приложения “снаружи” обращается только к обёртке, и про компонент ничего не знает. Мы скрываем детали с помощью обёртки.

Преимущества

Какие преимущества мы получаем используя обëртку:

  1. Количество используемых методов как правило резко сокращается, в обëртке мы оставляем лишь то что реально используется приложением.
  2. Мы можем сделать более строгую типизацию параметров, и указать типы для возвращаемых значений.
  3. Мы можем легко отследить все обращения к компоненту по классу обëртки. Так как обращение к компоненту происходит только из обëртки, то мы держим использование компонента под жëстким контролем.
  4. Мы можем сделать названия функций более читаемыми, понятными.
  5. Мы можем указать умолчания и тем самым избавиться от лишних параметров.
  6. Мы можем добавить новые методы в класс обëртки, которых нам нехватает в самом компоненте.
  7. При замене этого компонента на другой или обновлении версии, не придëтся менять код приложения. Все изменения будут только внутри обëртки.
  8. В обëртку хорошо ложится специфическая логика приложения, например различные настройки компонента в зависимости от окружения.

Не наследуемся

Следует избегать наследования обёртки от компонента.

Наследование используют чтобы не перечислять заново все методы компонента, это сокращает код обёртки.

Но наследование слишком сильно связывает обёртку с компонентом и на длинной дистанции только усложняет работу.

Вместо наследования лучше использовать композицию: когда объект обёртки общается с объектом компонента, но не наследуется от него.