我正在研究CQRS(以及一般的DDD),我不确定如何实现它的特定部分。
我理解分离命令和查询的好处;让我们说,为了它,我也使用事件采购,我有一个很好的列表,我的每个实体的历史。
据我了解,我的视图将构建的数据存储可以是任何形式,并且为了性能而对此进行非规范化是完全可以接受的。
我的问题是如何实现从规范化/以事件为中心的写入DB到我的视图就绪/非规范化表的转换/投影?
我是否使用来自我的域模型的事件实现此功能,并由应用程序的其他部分进行监听?我是否使用SQL视图(这不适用于使用RDBMS / NoSQL混合)。
如何在不使用各种不必要的getter污染域模型的情况下执行此操作?
由于
答案 0 :(得分:3)
您使用域事件管理阅读预测是正确的。您的聚合不需要公开其内部状态,因为它们广播的域事件将包含更新视图投影的所有必要信息。然后可以以任何形式存储视图投影数据。
有关实施细节,请查看Greg Youngs CQRS example,尤其是domain implementation和read model implementation。