Очень полезно делать свои обëртки для подключаемого извне кода.
Это один из моих любимых приëмов.
Он очень простой и мгновенно начинает приносить пользу.
Подключаем компонент
Например, мы подключили компонент Beanstalk для работы с сервером Beanstalk.
В конфиге приложения указали все настройки подключения, зарегистрировали компонент в DI контейнере, теперь мы можем обратиться к нему через средства фреймворка.
При обращении к компоненту, наш код будет вызывать класс из вендора.
В принципе, этого вполне достаточно чтобы код работал, и работать с компонентом напрямую вполне удобно.
Но что если мы создадим в своëм коде приложения класс-обëртку, как прослойку между нашим приложением и компонентом?
Делаем обёртку
Теперь любой код приложения будет обращаться не к компоненту а к нашей обëртке, и будет целиком изолирован от компонента.
Сам класс обёртки обращается всё к тому же компоненту. Но код приложения “снаружи” обращается только к обёртке, и про компонент ничего не знает. Мы скрываем детали с помощью обёртки.
Преимущества
Какие преимущества мы получаем используя обëртку:
- Количество используемых методов как правило резко сокращается, в обëртке мы оставляем лишь то что реально используется приложением.
- Мы можем сделать более строгую типизацию параметров, и указать типы для возвращаемых значений.
- Мы можем легко отследить все обращения к компоненту по классу обëртки. Так как обращение к компоненту происходит только из обëртки, то мы держим использование компонента под жëстким контролем.
- Мы можем сделать названия функций более читаемыми, понятными.
- Мы можем указать умолчания и тем самым избавиться от лишних параметров.
- Мы можем добавить новые методы в класс обëртки, которых нам нехватает в самом компоненте.
- При замене этого компонента на другой или обновлении версии, не придëтся менять код приложения. Все изменения будут только внутри обëртки.
- В обëртку хорошо ложится специфическая логика приложения, например различные настройки компонента в зависимости от окружения.
Не наследуемся
Следует избегать наследования обёртки от компонента.
Наследование используют чтобы не перечислять заново все методы компонента, это сокращает код обёртки.
Но наследование слишком сильно связывает обёртку с компонентом и на длинной дистанции только усложняет работу.
Вместо наследования лучше использовать композицию: когда объект обёртки общается с объектом компонента, но не наследуется от него.