gpt4 book ai didi

domain-driven-design - 如何通过内存更改实现 CQS?

转载 作者:行者123 更新时间:2023-12-04 08:21:08 24 4
gpt4 key购买 nike

在 DDD 上观看了 Greg Yound 的这个视频

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

我想知道当内存发生变化时,如何使用 DDD 实现命令查询分离 (CQS)?

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

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

您能否在 ASP.NET 中使用 CQS 和编辑屏幕之类的东西,其中在内存中进行更改,并且在将更改持久化到数据库之前,屏幕需要使用更改更新几次?

例如

  • 我从查询存储库中获取一个查询对象并将其显示在屏幕上
  • 我点击编辑
  • 我从查询对象存储库中重新获取查询对象并以编辑模式将其显示在表单上
  • 我更改了表单上的一个值,它自动回传并获取命令对象并发出相关命令
  • 做什么:我现在需要在命令对计算字段进行更改时显示更新的对象。由于命令对象尚未保存到数据库中,我无法使用查询存储库。对于 CQS,我并不打算公开命令对象的形状以显示在屏幕上。您将如何获取带有更新更改的查询对象以显示在屏幕上。

  • 我能想到的几个可能的解决方案是拥有一个 session 存储库,或者一种从命令对象获取查询对象的方法。
    还是 CQS 不适用于此类场景?

    在我看来,视频中的更改会直接持久化到数据库中,而且我还没有找到带有 CQS 的 DDD 示例,该示例解决了对域对象的批处理更改和更新修改后的域对象的 View 之前的问题最后发出一个命令来保存域对象。

    最佳答案

    所以听起来你想要的是一个更细化的命令。

    EG:用户与网页交互(比方说用购物车结账)。

    获取信息的多个页面正在构建一个命令。在用户实际检查所有信息在单个命令中发送到域的位置之前,不会发送该命令,我们称之为“CheckOut”命令。

    表示模型非常有助于抽象这种类型的交互。

    希望这可以帮助。

    格雷格

    关于domain-driven-design - 如何通过内存更改实现 CQS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1476886/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com