我正在研究 CQRS(和一般的 DDD),但我不确定如何实现它的特定部分。
我了解将命令和查询分开的好处;假设我也在使用事件溯源,并且我有一个很好的每个实体的历史列表。
据我所知,构建我的 View 的数据存储可以是任何形式,并且为了性能而对其进行非规范化是完全可以接受的。
我的问题是如何实现从我的规范化/以事件为中心的写入数据库到我的 View 就绪/非规范化表的转换/投影?
我是否使用域模型中的事件来实现它,并由应用程序的另一部分监听?我是否使用 SQL View (这在使用 RDBMS/NoSQL 混合时不起作用)。
如何在不使用各种不必要的 getter 污染领域模型的情况下做到这一点?
谢谢
最佳答案
您使用域事件管理读取预测的方向正确。您的聚合不需要公开其内部状态,因为它们广播的域事件将包含更新 View 投影所需的所有信息。然后可以以任何形式存储 View 投影数据。
有关实现细节,请查看 Greg Youngs CQRS example ,特别是 domain implementation和 read model implementation .
关于php - CQRS 中的反规范化/投影数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24458328/