考虑某些涉及域驱动设计(DDD)的对象:实体,价值对象,域事件和域服务。
其中哪些被认为是域对象?还有用于封装这些子集的抽象的其他名称吗?
在讨论DDD或域模型时,我可以确定各种有用的抽象:
[实体和值对象。我经常发现自己提到“实体或值对象”。最值得注意的是,这些是对域状态建模的模型。相比之下,域服务是无状态的,并且我认为域事件仅反映有关域[[如何进入其当前状态的信息。
实体,值对象和域事件。这些都可能包含或表示数据,而域服务仅定义行为。
领域模型识别的所有对象。
domain-object
标签也具有令人困惑的定义:域对象是为处理模型层的域逻辑而创建的对象。这些对象通常模拟现实生活中的真实(或虚拟)项目:人物,帖子,文档等。
最初的定义侧重于“处理领域逻辑”,倾向于“领域模型识别的所有对象”。然后这些示例倾向于“实体和值对象”。
DDD会以明确的定义,明确的无所不在的语言进行敲击,这是有充分理由的。它不应该以身作则吗? :)
其中哪些被认为是域对象?
所有人。它们是实现我们的领域模型的“对象”。在原始DDD文本中,Eric Evans还使用了短语“模型元素”。
它们之间的区别很大程度上是Java语言的约束所致。如果您只需创建定制值,则不需要“值对象”;如果您只需传递所需的功能,就不需要“域服务”。如果将“消息传递”作为普遍存在的构造,则不需要“域事件”,依此类推。
DDD会以明确的定义,明确的无所不在的语言进行敲击,这是有充分理由的。它不应该以身作则吗? :)
嗯,谜语的一部分是这些模式是通用语言的一部分,DDD的主要信息之一是,您不应允许通用的关注点将您从域本身中分散出来。
话说……是的-如果埃文斯18年前对这些想法有深刻的理解,并且能够引入最佳语言并提供防止语义扩散的对策,那今天会更好。