Что входит в объекты вашей доменной модели и что входит в ваши службы?

В дизайне, управляемом доменом, где вы выбираете неанемичную модель домена, как вы решаете, что реализовать в своих объектах домена по сравнению с сервис-ориентированными методами?

РЕДАКТИРОВАТЬ: я спросил это по-другому с примером и получил гораздо лучшие ответы здесь

1 ответ

Решение

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

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

Так что довольно часто можно увидеть такой код:

if (order.isValidForPurchase() && orderValidatorService.isValidOrder( order))
    orderService.order( order)

Просто потому, что части правды известны объекту порядка, а некоторые требуют внешних данных, известных orderValidatorService, Возможно, эти две строки кода также могут быть внутри orderService.order метод.

Я думаю, что всегда стоит исследовать, КАК много доменных объектов существует в этих процессах, иногда многое можно получить, создав больше концепций, чем вы думаете. Это действительно пересечение состояний бизнес-процессов и объектных моделей. Часто модели DDD стремятся захватить домен с чрезмерно структурной точки зрения, IMO игнорирует основные процессы слишком много. Так что, если вы слишком структурны, я думаю, что вы делаете Order объект. Если вы добавите процесс, может быть, вы делаете ShoppingCartOrder, UnshippedOrder, ShippedOrder, BilledOrder а также HistoricalOrder, Это также иногда упрощает интеграцию вашего сервиса.

Другие вопросы по тегам