DDD命名:域对象

问题描述 投票:0回答:1

考虑某些涉及域驱动设计(DDD)的对象:实体,价值对象,域事件和域服务。

其中哪些被认为是域对象?还有用于封装这些子集的抽象的其他名称吗?

在讨论DDD或域模型时,我可以确定各种有用的抽象:

  • [实体和值对象。我经常发现自己提到“实体或值对象”。最值得注意的是,这些是对域状态建模的模型。相比之下,域服务是无状态的,并且我认为域事件仅反映有关域[[如何进入其当前状态的信息。

  • 实体,值对象和域事件。这些都可能包含或表示数据,而域服务仅定义行为。

  • 领域模型识别的所有对象。

  • 能够大体讨论领域模型的各个部分,而不是它之外的概念。
有趣的是,即使Stack Overflow的domain-object标签也具有令人困惑的定义:

域对象是为处理模型层的域逻辑而创建的对象。这些对象通常模拟现实生活中的真实(或虚拟)项目:人物,帖子,文档等。

最初的定义侧重于“处理领域逻辑”,倾向于“领域模型识别的所有对象”。然后这些示例倾向于“实体和值对象”。

DDD会以明确的定义,明确的无所不在的语言进行敲击,这是有充分理由的。它不应该以身作则吗? :)

domain-driven-design naming domain-model domain-object
1个回答
0
投票
其中哪些被认为是域对象?

所有人。它们是实现我们的领域模型的“对象”。在原始DDD文本中,Eric Evans还使用了短语“模型元素”。

它们之间的区别很大程度上是Java语言的约束所致。如果您只需创建定制值,则不需要“值对象”;如果您只需传递所需的功能,就不需要“域服务”。如果将“消息传递”作为普遍存在的构造,则不需要“域事件”,依此类推。

DDD会以明确的定义,明确的无所不在的语言进行敲击,这是有充分理由的。它不应该以身作则吗? :)

嗯,谜语的一部分是这些模式是通用语言的一部分,DDD的主要信息之一是,您不应允许通用的关注点将您从域本身中分散出来。

话说……是的-如果埃文斯18年前对这些想法有深刻的理解,并且能够引入最佳语言并提供防止语义扩散的对策,那今天会更好。

© www.soinside.com 2019 - 2024. All rights reserved.