我最近开始调查CQRS和DDD,我正准备开始一个绿色的田野项目.我研究了大量来自Udi Dahan,Greg Young,Mark Nijhof等人的材料.这些非常有用,我想我对这些概念有很好的理解.但是,我仍然有一些问题可以解释如何将这些问题应用到我自己的领域.
我的系统基本上是一个复杂的规则引擎 - 规则将决定某些产品的最终价格.产品定义和规则将由管理员输入系统.规则将由管理员使用预定义的属性集来设计,这些属性可以具有来自预定义集的值,例如"购买目的"(转售,出租)或自由格式值,例如年龄.
每个产品都有一个基本价格,如果适用,规则将基本上添加/删除基本价格.
一个非常简单的示例规则可能是:
对于产品X,IF(购买目的=转售和年龄> 25)将25美元添加到基本价格.
因此,有两种用户使用系统,管理员,他们定义产品,规则和基本价格; 和其他用户根据他们通过假设用户界面输入的方案查询定价.
在这里,我的困惑是:在运行方案不改变域的状态可言,没有其他外部系统/人感兴趣的情况下执行的结果,但正在运行的用户他/她自己-它返回一个价的结果在运行给定方案的适用规则后进行计算.例如,用户可以选择产品X并查询给定方案的定价,例如(Purchase Purpose = Resell和Age = 40).同样,由于此操作根本不会更改域状态,我想这是一个查询.但是,有一个规则引擎在场景上运行来计算最终价格,我猜这可以被归类为正在运行的域逻辑.那么 - 这个逻辑属于哪里?这是一个仅在读取模型之外工作的查询,还是在运行场景中需要在域模型中运行的命令?再次,感觉域域层是这些规则的地方,但是我如何将场景执行的结果传递给用户(感觉就像是以这种方式思考它的查询).或许,CQRS不是解决这一特定问题的正确方案?