CQRS& DDD - 使用cqrs读取模型验证域模型业务规则

时间:2012-05-18 12:04:44

标签: domain-driven-design cqrs

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

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

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

2 个答案:

答案 0 :(得分:3)

根据我对CQRS的经验,我将ReadModel关联为最终一致,因此我不会对表示系统当前状态的ReadModel有100%的信心。当您想要分发和复制ReadModel时,情况就更好了。

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

听起来你想开始考虑域服务,它可以用来封装超出单个聚合/实体/值对象边界的域逻辑。

大卫在此指出Implement Domain Services as Extension Methods for the repository,吉米博加德有一个定义http://lostechies.com/jimmybogard/2008/08/21/services-in-domain-driven-design/

答案 1 :(得分:-1)

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

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