我可以想到两个地方将域逻辑放在事件源系统中,或者有一个缺点。事件采购:何处放置业务逻辑
- 在创建事件后在本地调用的聚合的事件处理程序。 (这是我在大多数examples中看到的,虽然他们大多数都有非常简单的逻辑)
问题:存储在事件存储器中并发布给订阅者的事件不包含此处理的数据,因此在投影时同一逻辑必须应用于该事件。 - 创建活动之前。现在处理的数据可以存储在事件中,并且投影不必知道任何有关业务逻辑的信息。 (我在示例中没有看到这种方法)
问题:在这种情况下,尽管事件只包含可能导致信息丢失的已处理数据。
更糟糕的是:由于事件数据已经计算出来,我也放弃了通过重播事件来纠正错误的业务逻辑的可能性。
示例:从某些数据计算度量标准。
要么我必须计算两次公式(一次在域模型中,一次在投影中)
或者我必须在发送事件并将其包括在内之前计算它。
修复计算问题被一些人明确描述为一项好处。请参阅此处:“修复错误您可能会发现导致系统计算错误值的编码错误,而不是修复编码错误并对存储的数据项执行有风险的手动调整,您可以修复编码错误并重放事件流,以便系统根据新版本的代码正确计算值。“ (从https://msdn.microsoft.com/en-us/library/jj591559.aspx#sec2) 但除此之外,谢谢澄清。 – hybridtupel
如果计算发生在读取模型的投影中 - 这确实有意义。事件中的计算适用于变更聚合状态不变。 –