看过 Greg Yound 在 DDD 上的这个视频
http://www.infoq.com/interviews/greg-young-ddd
我想知道当内存发生变化时,如何使用 DDD 实现命令查询分离 (CQS)?
使用 CQS,您有两个存储库,一个用于命令,一个用于查询。以及两个对象组,命令对象和查询对象。命令对象只有方法,没有可以暴露对象形状的属性,不能用于在屏幕上显示数据。另一方面,查询对象用于向屏幕显示数据。
在视频中,命令总是进入数据库,因此您可以使用查询存储库来获取更新的数据并重新显示在屏幕上。
您能否在 ASP.NET 中将 CQS 与类似和编辑屏幕一起使用,其中在内存中进行了更改,并且在将更改持久化到数据库之前需要多次更新屏幕?
例如
- 我从查询存储库中获取查询对象并将其显示在屏幕上
- 我点击编辑
- 我从查询对象存储库中重新获取查询对象并以编辑模式将其显示在表单上
- 我更改了表单上的一个值,该值自动回传并获取命令对象并发出相关命令
- 做什么:我现在需要在命令更改计算字段时显示更新的对象。由于命令对象尚未保存到数据库中,我无法使用查询存储库。而对于 CQS,我并不是要公开命令对象的形状以显示在屏幕上。您将如何通过更新的更改返回查询对象以显示在屏幕上。
我能想到的几个可能的解决方案是拥有一个会话存储库,或者一种从命令对象获取查询对象的方法。还是 CQS 不适用于此类场景?
在我看来,视频中的更改会直接保存到数据库中,而且我还没有找到一个使用 CQS 的 DDD 示例来解决对域对象进行批量更改和更新修改后域对象的视图的问题最后发出命令来保存域对象。