Текст, который вы указали, означает, что вам не нужно моделировать повторно используемую сущность для всей вашей системы или даже для всего ограниченного контекста (не моделируйте многократно используемые вещи из реальной жизни). Это плохой дизайн.
Вы должны смоделировать агрегат, который выполняет действие. Вы должны заполнить Агрегат только и только данными, необходимыми для выполнения этого действия, и агрегированным ответом, изменениями, перенесенными доменом, - это то, что вы должны сохранить.
Почему тогда сущности и В.О.? 1005 *
Для моделирования согласованности, инкапсуляция и развязка является основной частью, но это детали реализации. Для DDD важны разные роли (или концепции).
При подаче агрегата (конструктор, параметры вызова функции и т. Д.) Агрегат должен знать, работает ли он с сущностями и / или с V.O. построить свой ответ.
Если действие домена означает изменение атрибута объекта (что-то с уникальной идентификацией во всей вашей системе), ответ агрегата (после проверки всех правил и инвариантов) должен включать новое значение атрибута и идентификацию этой сущности, которая позволяет сохранить изменения.
Таким образом, по умолчанию каждый агрегат имеет свою собственную сущность с уникальным идентификатором и атрибутами, необходимыми для действия агрегата.
В одном агрегате может быть сущность Customer с идентификатором и его именем.
В другом агрегате может быть сущность Customer с идентификатором и его точками кармы.
Таким образом, каждый агрегат имеет свою собственную внутреннюю сущность клиента для работы. Когда вы отправляете агрегат, вы передаете данные о клиенте (то есть идентификатор и имя или идентификатор и очки кармы), и агрегат обрабатывает эту информацию как сущность (детали реализации, если внутри агрегата есть структура, класс и т. Д.) представлять лицо).
Одна важная вещь: если вам просто нужно иметь дело с идентификаторами сущностей, тогда рассматривайте это как V.O. (CustomerIdentityVO), поскольку идентификатор является неизменным, и, вероятно, в этом действии вам просто нужно записать этот CustomerIdentityVO в какое-то поле на постоянной основе, а не изменять какой-либо атрибут Customer.
Это стандартное видение. Как только вы начинаете определять общие структуры, относящиеся к нескольким агрегатам или одному агрегату, которые могут выполнять несколько действий с одними и теми же данными, вы начинаете рефакторинг, повторное использование и т. Д. Это просто вопрос хорошего проектирования ООП и принципов SOLID.
Пожалуйста, обратите внимание, что я стараюсь быть выше деталей реализации. Я знаю, что у вас почти всегда будут нежелательные артефакты, которые зависят от типа парадигмы программирования, выбранного языка программирования и т. Д., Но этот подход очень помогает избежать худшего артефакта, который у вас может быть.
Рекомендуемые значения:
http://blog.sapiensworks.com/post/2016/07/29/DDD-Entities-Value-Objects-Explained
http://blog.sapiensworks.com/post/2016/07/14/DDD-Aggregate-Decoded-1
http://blog.sapiensworks.com/post/2016/07/14/DDD-Aggregate-Decoded-2
https://blog.sapiensworks.com/post/2016/07/14/DDD-Aggregate-Decoded-3
и
https://blog.sapiensworks.com/post/2016/08/19/DDD-Application-Services-Explained
для полного видения загадки.