在DDD上观看了Greg Yound的这段视频
http://www.infoq.com/interviews/greg-young-ddd
我想知道当内存发生变化时如何用DDD实现命令查询分离(CQS)?
使用CQS,您有两个存储库,一个存储库用于命令,一个存储库用于查询。
以及两个对象组,即命令对象和查询对象。
命令对象仅具有方法,没有可以暴露对象形状的属性,并且不能用于在屏幕上显示数据。
另一方面,查询对象用于将数据显示到屏幕上。
在视频中,命令总是转到数据库,因此您可以使用查询存储库来获取更新的数据并在屏幕上重新显示。
您是否可以在ASP.NET中使用CQS和诸如“编辑”屏幕之类的功能,在内存中进行更改,并且需要将该更改屏幕多次更新,然后才能将更改持久保存到数据库中?
例如
我可以想到的两个可能的解决方案是拥有一个 session 存储库,或者是一种从命令对象中获取查询对象的方法。
还是CQS不适用于这种情况?
在我看来,视频中的更改会立即保留到数据库中,并且我还没有找到带有CQS的DDD示例,该示例解决了将更改批量添加到域对象并更新修改后的域对象的 View 的问题。最后发出命令以保存域对象。
最佳答案
如果您真的想为此使用CQS,那么我想说查询存储库和写存储库都具有对同一个后备存储的引用。通常,此引用是通过外部数据库进行的-但在您的情况下,它可以是List 或类似的引用。