我正在开发一个使用事件源存储数据的应用程序。由于许多原因,没有使用持久化读取模型,因此我们需要实现内存中的读取方法。
这样做的想法是,一些来自聚合的数据应该与当前日期一起读取,但也应该使用过去的日期来读取。因此,我认为的方法是处理该聚合的所有事件,并在聚合中Apply事件,以便在指定的日期拥有状态。
但是,我在多篇文章中读到,只有在命令发射时才使用Apply方法,而不是在读取阶段使用。
在阅读阶段使用Apply方法有意义吗?还是应该在不同的方法(某种处理器)中复制相同的逻辑?
我不会在这里发布任何代码,因为我想要的是了解什么是正确的方法,并更好地理解如何使用用户事件源。
发布于 2017-09-22 07:03:28
我不认为只有在发出事件时才会调用Apply方法。如果Apply方法的目的是将事件加载到聚合中,那么在将聚合还原到当前状态时将调用它。
似乎您需要对表示某个窗口期间(开始/结束日期)的聚合进行处理。创建一个表示感兴趣的位元的读取模型,并将其存储为对时间敏感的数据,然后对其进行查询可能更合适。
如果处理过于密集,您甚至可能希望发出一个命令,请求排序的报表或视图,但该命令仍将在时间敏感的读取模型中工作,然后生成所需的输出。一旦完成,用户就可以得到通知,结果已经准备好供仔细阅读。
正如@Constantin Galbenu所说:您应该避免聚合的内部状态,这与不查询您的域模型有关联。
发布于 2017-09-22 06:44:58
当聚合破坏它的封装时,应该避免读取聚合的内部和私有状态。此外,聚合存储它需要的任何状态,以检查其不变量,查询该状态将迫使聚合保持不需要的附加状态。
总之,避免阅读写的部分。
https://stackoverflow.com/questions/46344818
复制相似问题