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