Что входит в объекты вашей доменной модели и что входит в ваши службы?
В дизайне, управляемом доменом, где вы выбираете неанемичную модель домена, как вы решаете, что реализовать в своих объектах домена по сравнению с сервис-ориентированными методами?
РЕДАКТИРОВАТЬ: я спросил это по-другому с примером и получил гораздо лучшие ответы здесь
1 ответ
Идея DDD заключается в том, что модель предметной области содержит ваши данные и большую часть бизнес-логики. Службы обычно имеют дело с постоянством этих структур.
Тогда есть все те промежуточные случаи, когда бизнес-процесс состоит из нескольких шагов, которые неизменно изменяют / модифицируют доменные объекты. Обычно вы используете сервисы для реализации какого-либо процесса. Поэтому обычно вы обновляете доменные объекты с помощью результатов сервисов. Вы никогда не позволите реализациям доменного объекта сами по себе вызывать сервисы!
Так что довольно часто можно увидеть такой код:
if (order.isValidForPurchase() && orderValidatorService.isValidOrder( order))
orderService.order( order)
Просто потому, что части правды известны объекту порядка, а некоторые требуют внешних данных, известных orderValidatorService
, Возможно, эти две строки кода также могут быть внутри orderService.order
метод.
Я думаю, что всегда стоит исследовать, КАК много доменных объектов существует в этих процессах, иногда многое можно получить, создав больше концепций, чем вы думаете. Это действительно пересечение состояний бизнес-процессов и объектных моделей. Часто модели DDD стремятся захватить домен с чрезмерно структурной точки зрения, IMO игнорирует основные процессы слишком много. Так что, если вы слишком структурны, я думаю, что вы делаете Order
объект. Если вы добавите процесс, может быть, вы делаете ShoppingCartOrder
, UnshippedOrder
, ShippedOrder
, BilledOrder
а также HistoricalOrder
, Это также иногда упрощает интеграцию вашего сервиса.