我正在开发一个使用事件源来存储数据的应用程序。由于许多原因,未使用持久化读取模型,因此我们需要实现内存中读取方法。
这个想法是聚合中的一些数据应该用当前日期读取,也可以用过去的日期读取。因此,我想的方法是处理聚合中的所有事件,并在聚合中Apply
事件,以便在指定日期生成状态。
但是,我在各种文章中读到,Apply
方法只应在命令发出时使用,而不是在读取阶段使用。
在阅读阶段使用Apply
方法是否有意义?或者也许应该用不同的方法(某种处理器)复制相同的逻辑?
我没有在此发布任何代码,因为我正在寻找的是了解正确的方法,并更好地了解如何使用事件采购。
答案 0 :(得分:2)
应该避免读取聚合的内部和私有状态,因为它会破坏它的封装。此外,Aggregate存储它需要的任何状态,以便检查其不变量,并查询该状态将强制Aggregate维持不需要的其他状态。
总之,避免阅读写作方。
答案 1 :(得分:1)
我不认为只有在发出事件时才会调用Apply
方法。如果Apply
方法的目的是将事件加载到聚合中,那么在将聚合恢复到当前状态时将调用它。
似乎您需要处理您的聚合,以便在某个窗口期间(开始/结束日期)表示它。 可能更适合创建一个表示您感兴趣的位的读取模型,并将它们存储为时间敏感数据,然后查询 。
如果处理过于密集,您甚至可能希望发出请求报告或视图的命令,但仍然通过时间敏感读取工作模型,然后产生所需的输出。完成后,可以通知用户结果已准备好进行细读。
正如@Constantin Galbenu所述:你应该避免使用聚合的内部状态,这与不查询域模型有关。