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

4

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

  1. 聚合是否应该负责值对象的创建,也就是说将值对象的创建封装在聚合根中。
  2. 我能否在不使用聚合的情况下直接在应用程序服务中创建值对象?
1个回答

9
我可以直接在应用程序服务中创建值对象而不使用聚合吗?
当然可以。这是一个非常常见的模式 - 例如,在客户端/服务器架构中,客户端将向应用程序发送消息,邀请对域模型执行某些操作(命令/查询)。该消息将被设计为跨越进程边界 - 换句话说,它是数据传输对象。应用程序组件将接收该消息,并将其重新表达为值对象,该值对象将被领域理解。
例如:域的查询可能会要求获取一些由UUID标识的帐户的详细信息。因此,初始DTO可能是一个字符串。应用程序层将该字符串抛入JSON解析器中,然后找到帐户ID参数(它只是数据),并使用它来创建一个AccountId值对象(域将识别该值对象)。
值对象的一部分意义在于相等的对象可以自由地互换。没有人关心你有哪个7。
“我们封装了聚合根中值对象的创建。”
您的聚合代码也可能创建值对象。更改聚合的状态通常需要创建/计算新值。这没有任何问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接