【问题标题】:How are post-conditions implemented with CQRS?CQRS 如何实现后置条件?
【发布时间】:2012-09-14 09:07:08
【问题描述】:

CQRS 如何处理立即一致模型的后置条件?我意识到这样的事情与最终一致的带有事件源等的系统无关。但是如果我只是想将 vanilla CQRS 应用到一个简单的界面,我将如何编写我的后置条件? CQRS 的想法是否总是假设最终的一致性?

CRUD:

IDictionary
{
   void Set(string key, object value); // Ensures: Get(key) == value
   object Get(string key);
}

CQRS:

IDictionaryQueries
{
   object Get(string key);
}

IDictionaryCommands
{
   void Set(string key, object value); // Ensures: ???
}

【问题讨论】:

    标签: .net code-contracts cqrs eventual-consistency formal-verification


    【解决方案1】:

    从交易行为和边界的角度考虑它。在立即一致的模型中,Set 和 Get 将在同一个事务中执行。 “事务”将确保两个接口后面的实际存储始终保持一致。这是您的保证,在调用 Set 方法后,Get 方法将返回预期值。只要实现不引入解耦机制(如消息传递),就会保持这种保证。

    在最终一致性的情况下,这两个操作在不同的事务中执行,唯一的保证是最终 Get 将返回预期值。

    现在在代码合同方面,我必须说我对它们不是很熟悉,我确实有点违背 CQRS 的目的,即有一个依赖于查询类操作。可能你的后置条件不应该用Get操作的therms来表示,而更像是“命令执行成功”。这将是您在接口级别的后置条件。在实现级别,您很可能拥有实现这两个接口的同一个类,您可以基于 Get 操作表达后置条件。

    【讨论】:

      猜你喜欢
      • 2012-02-27
      • 1970-01-01
      • 1970-01-01
      • 2020-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多