如何在内存中实现CQS更改?

Ian*_*Ian 6 domain-driven-design repository-pattern cqrs

观看了Greg Yound关于DDD的视频

http://www.infoq.com/interviews/greg-young-ddd

我想知道如何在内存更改时使用DDD实现命令查询分离(CQS)?

使用CQS,您有两个存储库,一个用于命令,一个用于查询.以及两个对象组,命令对象和查询对象.命令对象只有方法,没有可以公开对象形状的属性,不能用于在屏幕上显示数据.另一方面,查询对象用于向屏幕显示数据.

在视频中,命令总是转到数据库,因此您可以使用查询存储库来获取更新的数据并在屏幕上重新显示.

您是否可以在ASP.NET中使用CQS和编辑屏幕,在内存中进行更改并且在更改持久保存到数据库之前需要使用更改多次更新屏幕?

例如

  1. 我从查询存储库中获取一个查询对象并将其显示在屏幕上
  2. 我点击编辑
  3. 我从查询对象存储库中重新获取查询对象,并在编辑模式下将其显示在表单上
  4. 我在表单上更改了一个值,该值自动恢复并获取命令对象并发出相关命令
  5. 怎么做:我现在需要显示更新的对象,因为命令对计算字段进行了更改.由于命令对象尚未保存到数据库,因此无法使用查询存储库.而使用CQS,我并不是要公开要在屏幕上显示的命令对象的形状.如何通过屏幕上显示的更新更改返回查询对象.

我能想到的几个可能的解决方案是拥有会话存储库,或者从命令对象获取查询对象的方法.或者CQS不适用于这种情况吗?

在我看来,在视频中的变化会直接传递到数据库,我还没有找到一个带有CQS的DDD示例,它解决了对域对象进行批量更改以及更新修改后的域对象视图的问题.最后发出一个命令来保存域对象.

Eri*_*bes 1

如果您确实想为此使用 CQS,我想说查询存储库和写入存储库都具有对同一后备存储的引用。通常此引用是通过外部数据库 - 但在您的情况下,它可能是 List<T> 或类似的。