DDD命名:域对象



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

以下哪些被认为是域对象?还有其他的抽象名称可以封装其中的一个子集吗?

当谈到DDD或领域模型时,我可以识别出各种有用的抽象:

  • 实体和值对象我经常提到"实体或价值对象"。最值得注意的是,这些是对域的状态进行建模的。相比之下,域服务是无状态的,我认为域事件只是反映了域是如何处于当前状态的信息。

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

  • 域模型识别的所有对象能够谈论领域模型的一般部分,而不是它之外的概念,这是很有用的。

有趣的是,即使是Stack Overflow的domain-object标签也有一个令人困惑的定义:

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

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

DDD强调了一种定义明确、毫不含糊的普遍语言,这是有充分理由的。难道不应该以身作则吗?:(

其中哪些被认为是域对象?

所有这些。它们是实现我们的域模型的"对象"。在最初的DDD文本中,Eric Evans也使用了短语"模型元素"。

它们之间的区别很大程度上是Java语言限制的结果。如果你能创造定制的价值,你就不需要"价值对象";如果您可以传递所需的功能,那么您就不需要"域服务"。如果你把"消息传递"作为一个普遍存在的结构,那么你就不需要"域事件",等等

DDD使用了一种定义明确、毫不含糊的普遍语言,这是有充分理由的。难道不应该以身作则吗?:(

问题的一部分是,这些模式是通用语言的一部分,DDD的核心信息之一是,你不应该让通用问题分散你对领域本身的注意力。

也就是说。。。是的,如果埃文斯在18年前对这些想法有了丰富的理解,并能够引入最好的语言,并提供防止语义扩散的对策,那么今天会更好。

相关内容

  • 没有找到相关文章

最新更新