在域驱动设计中,客户端直接聚合root来实现业务逻辑,聚合根可以由工厂创建或从存储库加载。为了实现业务逻辑,我们必须在某些情况下创建一个新的值对象,所以我的问题是:
答案 0 :(得分:5)
我可以直接在没有聚合的应用服务中创建价值对象吗?
当然,请继续前进。这是一种非常常见的模式 - 例如,在客户端/服务器体系结构中,客户端将向应用程序发送消息,邀请域模型上的某些操作(命令/查询)。该消息将被设计为跨越进程边界 - 换句话说,它是数据传输对象。应用程序组件将接收该消息,并将其重新表达为域将理解的值对象。
示例:域的查询可能会询问某个帐户的详细信息,该帐户由UUID标识。所以最初的DTO可能是一个字符串。应用程序层将该字符串抛出到JSON解析器中,然后查找帐户id参数(即"只是数据"),并使用它创建一个AccountId值对象(域将识别)。
值对象的一部分是等对象可以自由地互相替换。没人关心你有哪7个。
我们在聚合根中封装了值对象的创建。
您的汇总代码也可能会创建价值对象。对聚合状态的更改通常需要创建/计算新值。没错。