Как шаблон адаптера разрешает зависимости? - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть вопрос с шаблоном адаптера.Я реализую этот шаблон, потому что у меня есть сторонняя библиотека, и я не хочу зависеть от нее.

Однако я не понимаю, почему создание IAdapter и адаптера в одном проекте приведет к удалениюзависимость.

Поскольку при изменении сторонней библиотеки пакет необходимо перекомпилировать, поэтому также необходимо перекомпилировать любой класс, использующий IAdapter.

Имеет ли IAdapter и адаптердолжны быть в разных упаковках?

Ответы [ 2 ]

0 голосов
/ 23 февраля 2019

Мера того, отсоединены ли 2 компонента / класса или нет, основана не только на необходимости перекомпиляции пакета.Существует несколько измерений.

  1. Можете ли вы заменить стороннюю библиотеку из клиентского приложения, не вызывая каких-либо изменений кода в клиенте IAdapter?
  2. Можете ли вы заменить третьюсторонняя библиотека без необходимости перекомпоновки клиента IAdapter?
  3. В некоторых случаях можно ли заменить стороннюю библиотеку во время выполнения без полного перезапуска сервера приложений?

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

  1. Вы можете реализовать IAdapter с помощью ThirdParty1Adapter.Если вы хотите заменить его, вы можете реализовать ThirdParty2Adapter, который выполняет все контракты IAdapter.Ваши клиенты IAdapter не будут затронуты.
  2. Вы можете связать класс реализации IAdapter в выделенном фляге.Клиентское приложение ожидает, что одна из реализаций IAdapter будет предоставлена ​​контейнером DI или сервером приложений.Здесь есть варианты, но они не зависят от технологии.
  3. Вам нужна среда выполнения, которая позволяет динамически добавлять файлы jar и заменять зависимости в существующих классах, загружаемых средой выполнения.Вы можете использовать шаблон класса, распространенный в OSGi, который предлагает создание отдельного пакета API, пакета поставщика и пакета потребителя.Вы можете добавлять / заменять пакеты провайдеров в вашей среде выполнения OSGi, которые можно подбирать и вставлять в уже запущенные классы.
0 голосов
/ 22 февраля 2019

Адаптер не волшебный.Он адаптирует определенную версию класса / библиотеки, чтобы сделать ее пригодной для использования с API, который вы хотите использовать.
Вы должны пойти дальше, чем другие пакеты, поскольку в действительности, в вашем случае классы адаптера (интерфейс адаптера и реализация адаптера)) даже не следует включать в исходный код сторонней библиотеки.
Вы хотите разделить их, чтобы адаптер полагался на определенную и выпущенную версию адаптированного класса, чтобы сделать его интеграцию стабильной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...