Шестиугольная архитектура / порты и адаптеры: конфигурация приложения с несколькими адаптерами драйверов - PullRequest
0 голосов
/ 21 октября 2019

Мне нужны рекомендации или рекомендации по настройке и структуризации приложения, которое соответствует гексагональной архитектуре, которая поддерживает несколько адаптеров (драйверов) одновременно.

Мой API / Уровень приложений / Порты представляют границу Приложения. Сейчас я пишу адаптеры драйверов, с целью, чтобы приложение поддерживало как адаптер консоли / CLI, так и адаптер REST в тандеме.

Есть ли у кого-нибудь какие-либо мысли о подходах к главному компоненту, который настраивает и подключает приложениевместе?

  • Один главный компонент, который настраивает полное приложение: включая все основные адаптеры. Наряду с загрузкой конфигурации приложения. В этом случае он запустит службы REST и запустит консольное приложение CLI.

  • Отдельный главный компонент для каждого типа первичного адаптера. то есть. Один для приложения REST. Один для CLI / Консольного приложения. Мое беспокойство приведет к большому дублированию при настройке приложения в пределах границ (т. Е. API-сервисы, репозитории и т. Д.).

  • Следуйте вышеприведенному подходу, но извлеките общееконфигурация / подключение к общему классу.

Если у кого-то есть примеры, которыми они могут поделиться, было бы интересно посмотреть.

Приветствия,

Стив

1 Ответ

1 голос
/ 22 октября 2019

Это интересный вопрос.

С моей точки зрения, я стараюсь быть верным шаблону, объясненному его автором, хотя было бы также возможно запустить более одного адаптера драйвера для одного порта драйвера. «приложение в целом» (назовем его системным, поскольку приложение является шестиугольником) - это экземпляр адаптера драйвера, работающего на каждом порту драйвера шестиугольника, и управляемый адаптерреализация каждого управляемого порта.

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

Тем не менее, я изучил два подхода для запуска системы:

(1) Чтобы иметьдополнительный компонент (назовите его основной компонент , корень композиции, автозагрузка, init или все, что вы хотите), который создает экземпляры управляемых адаптеров и шестиугольника, и, наконец, создает экземпляры адаптеров драйверов и запускает их. Таким образом, архитектура системы будет выглядеть как контейнер приложения на стороне драйвера, а архитектура подключаемого модуля на стороне драйвера.

(2) Для запуска каждого адаптера драйвера отдельно . Именно адаптер драйвера запускает игру, запрашивая у шестиугольника экземпляр порта драйвера, а шестиугольник запрашивает у каждого управляемого порта экземпляр управляемого адаптера.

Итак, на ваш вопрос о главном компонентев вашем примере , согласно моему подходу (1), у меня будет запущено два экземпляра шестиугольника, но у вас может быть только один, я не вижу никаких проблем в этом.

Я написал теоретическийстатья о гексагональной архитектуре в https://softwarecampament.wordpress.com/portsadapters/, и сейчас я работаю над статьей о том, как реализовать гексагональную архитектуру, и примером кода.

...