事件采购:内存读取模型,在读取期间应用事件是否有意义?

时间:2017-09-21 13:09:35

标签: domain-driven-design event-sourcing

我正在开发一个使用事件源来存储数据的应用程序。由于许多原因,未使用持久化读取模型,因此我们需要实现内存中读取方法。

这个想法是聚合中的一些数据应该用当前日期读取,也可以用过去的日期读取。因此,我想的方法是处理聚合中的所有事件,并在聚合中Apply事件,以便在指定日期生成状态。

但是,我在各种文章中读到,Apply方法只应在命令发出时使用,而不是在读取阶段使用。

在阅读阶段使用Apply方法是否有意义?或者也许应该用不同的方法(某种处理器)复制相同的逻辑?

我没有在此发布任何代码,因为我正在寻找的是了解正确的方法,并更好地了解如何使用事件采购。

2 个答案:

答案 0 :(得分:2)

应该避免读取聚合的内部私有状态,因为它会破坏它的封装。此外,Aggregate存储它需要的任何状态,以便检查其不变量,并查询该状态将强制Aggregate维持不需要的其他状态。

总之,避免阅读写作方。

答案 1 :(得分:1)

我不认为只有在发出事件时才会调用Apply方法。如果Apply方法的目的是事件加载到聚合中,那么在将聚合恢复到当前状态时将调用它。

似乎您需要处理您的聚合,以便在某个窗口期间(开始/结束日期)表示它。 可能更适合创建一个表示您感兴趣的位的读取模型,并将它们存储为时间敏感数据,然后查询

如果处理过于密集,您甚至可能希望发出请求报告或视图的命令,但仍然通过时间敏感读取工作模型,然后产生所需的输出。完成后,可以通知用户结果已准备好进行细读。

正如@Constantin Galbenu所述:你应该避免使用聚合的内部状态,这与不查询域模型有关。