DDD:谁负责创建价值对象和实体?

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

在域驱动设计中,客户端直接聚合根来实现业务逻辑,聚合根可以由工厂创建或从存储库加载。为了实现业务逻辑,我们必须在某些情况下创建一个新的值对象,所以我的问题是:

  1. 应该聚合负责创建值对象,这意味着我们在聚合根中封装了值对象的创建。
  2. 我可以直接在没有聚合的应用服务中创建值对象吗?
domain-driven-design
1个回答
5
投票

我可以直接在没有聚合的应用服务中创建值对象吗?

当然,请继续前进。这是一种非常常见的模式 - 例如,在客户端/服务器体系结构中,客户端将向应用程序发送消息,邀请域模型上的某些操作(命令/查询)。该消息将被设计为跨越进程边界 - 换句话说,它是一个数据传输对象。应用程序组件将接收该消息,并将其重新表达为域将理解的值对象。

示例:域的查询可能会询问某个帐户的详细信息,该帐户由UUID标识。所以最初的DTO可能是一个字符串。应用程序层将该字符串抛出到JSON解析器中,然后查找帐户id参数(“只是数据”),并使用它创建一个AccountId值对象(域将识别该对象)。

值对象的一部分是相等的对象可以自由地互相替换。没有人关心你有哪7个。

我们在聚合根中封装了value对象的创建。

您的聚合代码也可能创建值对象。对聚合状态的更改通常需要创建/计算新值。没有错。

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