3

我是 DDD 和 CQRS 模式的新手,我想听听您的意见,如何验证域实体。我将使用常见示例 Order->OrderLine,其中 Order 是 AR。

聚合中业务规则的验证是通过 AR 来解决一致性问题的。如何验证需要订单聚合之外的数据的业务规则?

我也在使用 CQRS 方法,我认为使用 ReadModel 获取我需要验证我的业务规则的数据不是一个糟糕的选择......你怎么看?

4

2 回答 2

3

根据我对 CQRS 的经验,我认为 ReadModel 是最终一致的,因此我不会 100% 相信代表系统当前状态的 ReadModel。当您想要分发和复制您的 ReadModels 时,情况就更是如此。

我只想使用 ReadModel 来限制发送到您的应用程序的无效命令的数量。

在我看来,您想开始考虑域服务,它可用于封装位于单个聚合/实体/值对象边界之外的域逻辑。

正如大卫在此处将域服务作为存储库的扩展方法指出的那样,Jimmy Bogard 有一个定义http://lostechies.com/jimmybogard/2008/08/21/services-in-domain-driven-design/

于 2012-05-18T12:40:05.500 回答
-1

是的,使用读取模型进行命令验证。我称之为“命令上下文”——世界的当前状态,基于哪个命令可能有效或无效。在 CQRS 中,世界的当前状态在您的读取模型中表示。用户正在根据它做出决定,应该发出什么命令。

您还可以考虑各种方式来指导用户决策,以便他不会发出无效命令(如果用户名不是唯一的,请提前警告等)。

于 2012-05-18T12:24:13.453 回答