Должен ли домен когда-либо получать доступ к службам приложений другой системы? - PullRequest
2 голосов
/ 01 июля 2011

Специально для двух систем: может ли домен системы A вызывать службы приложений / удаленный фасад системы B?

Например, если у Системы заказов есть сущность Заказа в своем домене, должен ли метод проверки этой сущности Заказа вызвать сервисную службу Службы хранения запасов, чтобы проверить, достаточно ли товара на складе для выполнения заказа?

Мой инстинкт заключается в том, что это неправильный способ ведения дел.

Это упрощенная версия предыдущего, довольно запутанного вопроса: Интеграция между различными доменными системами проектирования Не обязательно и не советуем ссылаться на этот предыдущий вопрос.

Ответы [ 2 ]

1 голос
/ 26 февраля 2012

На мой взгляд, существует много способов преодоления такой проблемы. Прежде всего, зачем вашей доменной модели нужен доступ к другим доменным моделям?

a) Для создания более сложной модели домена ==> Эта модель домена может быть пользовательской в ​​слое Service для создания ViewModel. ==> Эта viewModel будет возвращена клиенту.

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

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

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

1 голос
/ 01 июля 2011

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

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

...