【发布时间】:2021-06-06 20:10:56
【问题描述】:
在阅读 CQRS 时,经常提到写入模型不应依赖于任何读取模型(假设有一个写入模型和最多 N 个读取模型)。这很有意义,特别是因为读取模型通常只会最终与写入模型保持一致。此外,我们应该能够在不破坏写入模型的情况下更改或替换读取模型。
但是,读取模型可能包含跨写入模型的许多实体聚合的有价值信息。这些聚合甚至可能包含重要的业务规则。可以很容易地想象一个业务策略,它评估读取模型拥有的一条信息,并通过写入模型更改一个或多个实体。但是这个政策应该在哪里定位/实施呢?这不是将来自特定读取模型的信息与写入模型紧密耦合的关键业务逻辑吗?
当我想在不将写入模型与读取模型耦合的情况下实现上述策略时,我可以想象以下策略:在写入模型中包含一个物化视图,该视图会在相关部分同步更新所涉及的实体发生变化(使用 DDD 时,这可以通过域事件来完成)。然而,这将写入模型反规范化,实际上是嵌入在写入模型本身中的特殊读取模型。
我可以想象 DDD 纯粹主义者会说这样的政策不应该存在,因为它代表了一个包含多个实体(又名聚合)的业务不变量/规则。理论上我可能会同意,但在实践中,我还是经常遇到这样的要求。
最后,我的问题很简单:您如何处理根据某些条件更改数据的要求,这些条件的评估需要读取模型?
【问题讨论】: