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

Blu*_*eel 2 domain-driven-design

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

  1. 应该聚合负责创建值对象,这意味着我们在聚合根中封装了值对象的创建.
  2. 我可以直接在没有聚合的应用服务中创建值对象吗?

Voi*_*son 5

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

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

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

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

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

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