【发布时间】:2019-05-16 16:18:23
【问题描述】:
假设我有两个聚合 A 和 B。我在 A 上使用工厂方法来创建 B。我还要求 A 不能产生超过 x 个 B 实例。
下面的实现看起来很自然:
A.createB() {
if (total> x)
raise an error
total++
return new B()
}
但这会违反修改两个聚合的规则:创建 B 和修改 A。
如果我尝试遵守此规则,我会: 1. 在 A 中创建 B,并引发类似 BCreated 的事件。 2. 通过处理 BCreated 事件更新 A 在下一笔交易中的总计数。
对我来说,在这个特定的例子中,这看起来像是一个奇怪的解决方法,因为在 A 上调用 createB() 方法后,我让它处于不一致的状态。
我错过了什么吗?
【问题讨论】: