Шаблон адаптера в шестиугольной / луковичной архитектуре SOA

Предполагая, что у вас есть приложение, для которого требуются 2 службы, например. Application, Service1, Service2

Если вы создадите дополнительный уровень косвенности и продвинете одну из служб в службу приложений, а другую понизите до службы домена, следуя этому луковая архитектура.

Или вам нужно подключить Application напрямую к Service1 и Service2?

С другим уровнем косвенного обращения вы можете уменьшить зависимость от уровня Application, особенно по отношению к внешним службам, например. «Paypal», «Facebook», «CyberSource» и создайте адаптеры сервисов приложений, которые больше подходят для вашей парадигмы программирования. В конце концов, если все разработчики знакомы со всеми этими широко разнообразными API, это действительно пагубно сказывается на производительности. Фасад / адаптер упростит разработку, защищая приложение от изменений инфраструктуры. например. Компания потерпела неудачу с CyberSource и решила вместо этого использовать Paypal, к счастью, ваше приложение защищено, и вам нужно было только заменить адаптер и ничего больше.

Тем не менее, адаптер определенно создает негибкость. По мере роста сложности приложения адаптер также становится негерметичным. Тогда у вас потенциально есть 3 проблемы: негерметичная абстракция, ленивый слой (слой, который недостаточно работает из-за слишком большого количества дыр) и нарушение общего принципа закрытия, поскольку каждый раз, когда вам нужно изменить пользовательский интерфейс, вы должны изменить не только ваше приложение, но также и ваши адаптеры.

А что произойдет, если Service2 уже является внутренней службой той же компании? Стоит ли по-прежнему создавать адаптер для каждой подсистемы? Что делать, если у вас небольшая команда? Что, если у вас есть десятки команд с разнообразным набором технологий? Есть ли какие-либо рекомендации по правильности добавления еще одного уровня косвенного обращения, а не простого вызова службы напрямую?


person Alwyn    schedule 16.09.2013    source источник


Ответы (1)


Я считаю, что вы должны разработать свое приложение так, чтобы оно зависело от интерфейсов, которые удобны для вашего приложения, независимо от каких-либо соображений об использовании сторонних сервисов. Ваша идея использования адаптера / фасада хороша, но я не вижу причин относиться к Service1 иначе, чем к Service2.

Если мое приложение создает виджеты, мне следует просто вызвать MyService.MakeWidget(args);. Тот факт, что эта операция координирует поведение или 2 разных внешних сервиса, является деталью реализации.

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

person Chris McKenzie    schedule 18.09.2013