Лучший способ динамической загрузки адаптеров в гексагональной архитектуре? - PullRequest
0 голосов
/ 20 мая 2018

Я хочу применить шестиугольную архитектуру к моему userManagement boundedContext.Поэтому я хочу определить 2 порта (один для UI, другой для serviceBus интеграции, чтобы прослушивать события от других сервисов).

Вопрос в том, хочу ли я реализовать adapters для UI port (я не уверен, что он должен называться UI port, в основном это интерфейсы, где живут CreateNewUser, BlockUser, CheckIfUserExists операции) с использованием различных технологий WCF и Оуэн .Как я могу добавить их в мое консольное приложение?

Допустим, я хочу реализовать Soap adapter, используя WCF , и отдохнуть, используя Owin .Во многих примерах я вижу, что люди создают отдельные консольные приложения для каждого адаптера, например: MyDDD.UserManagement.Api.Rest.Host и MyDDD.UserManagement.Api.Soap.Host.Чего я хочу добиться, так это одного хост-приложения и возможности каким-либо образом подключать к нему адаптеры.Пожалуйста, поделитесь своими идеями!

1 Ответ

0 голосов
/ 01 июня 2018

Итак, я хочу определить 2 порта (один для пользовательского интерфейса, другой для интеграции с сервисом Bus, для прослушивания событий от других сервисов).

Вы неправильно поняли понятие порта.То, что вы называете пользовательским интерфейсом и интеграцией сервисной шины, - это адаптеры.Это 2 адаптера для порта.Они используют порт.Они называют операции, предлагаемые портом.Порт является технологически независимым, независимым от механизма доставки.Порт - это просто интерфейс, предлагающий варианты использования вашего приложения.

Порт интерфейса пользователя (я не уверен, что его следует называть портом интерфейса, в основном это интерфейсы, где живут операции CreateNewUser, BlockUser, CheckIfUserExists)

Порты должны быть названы в соответствии с их назначением.Если операции предназначены для управления пользователями, я должен назвать это «userManagement».Или, если ваш BC назван таким образом, назовите порт просто «api» (хотя я предпочитаю полное имя).

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

Я думаю, что вы здесь не правы.Если под консолью вы подразумеваете CLI, то консоль - это еще один адаптер для порта.Вы не добавляете адаптеры к нему.

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

Я говорю вам, как я это делаю: адаптеры объявляют себя с именем (с пользовательской аннотацией).Основной компонент при начальной загрузке всей системы сканирует адаптеры и выбирает нужные вам для каждого порта, проверяя их имена.

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

Я делаю это так: у меня есть многомодульный проект.Шестигранник - это один модуль, а каждый адаптер - это другой модуль.У меня есть другой модуль с именем "main", который собирает все вместе и запускает нужные вам адаптеры.Например, вы можете поместить нужные адаптеры для каждого порта в файл свойств.Вот как я это делаю.

...