【问题标题】:CQRS and slow commands on legacy system遗留系统上的 CQRS 和慢命令
【发布时间】:2015-10-26 08:41:12
【问题描述】:

我是 CQRS 的新手,希望得到有关如何在旧系统上实现此功能的建议。

我有一些问题:

  1. 数据库将保留在旧系统中。我猜对了,我们对 Event Sourcing 没有任何用处?

  2. 执行某些命令需要时间(从几秒到几分钟不等)。我们如何使用 CQRS 处理它?

我希望通过以下方式解决这个问题:

  1. 客户端发送 UpdateSomeDataCommand
  2. UpdateSomeDataHandler 创建一个从旧系统检索数据的新线程
  3. 客户端使用读取模型获取缓存数据并呈现给用户
  4. UpdateSomeDataHandler 准备好检索数据时,它会发送 SomeDataUpdated 事件
  5. 读取模型对 SomeDataUpdated 做出反应并将新数据存储在其缓存数据库中
  6. 读取模型使用 INotifyPropertyChanged 通知客户端更新的数据可用。
  7. 客户端从读取模型中检索更新数据并将其呈现给用户。

感觉好像我做错了。但我想不出更好的了。

【问题讨论】:

    标签: c# cqrs legacy-database


    【解决方案1】:
    1. 我们无法告诉您是否需要事件溯源。有无数种技术可以实现事件溯源。它只是一个“数据库”,所有命令都存储在其中,这些命令会更改数据库中的任何内容。您可以将其用于分析或调试或回放场景(再次用于业务目的,用于分析或调试)。所以这取决于你想做什么。为了拥有事件溯源,您不需要事件溯源。

    2. 问问自己你想达到什么目标。你的路看起来不错。但我们不知道这是否合适。第 1、2、4 和 5 步是强制性的。在我看来,3、6 和 7 就像你在判断如何处理中间的信息。这完全取决于您正在处理的业务模型。如果这是强制性的 - 那么这是一个好方法。

    为了让它听起来更清晰一点。您只是将命令分派到负责处理命令数据库的特定服务。到现在为止还挺好。 读取数据库(前端用户)是否必须知道在实体上发出了繁重的命令? 当读取数据库中有新数据可用时是否需要通知前端 - 以便它可以自动将新数据加载到前端?

    如果是这样 - 你的方法很好。

    【讨论】:

      猜你喜欢
      • 2013-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-30
      相关资源
      最近更新 更多