Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CQRS-单独的命令和事件处理程序_Cqrs - Fatal编程技术网

CQRS-单独的命令和事件处理程序

CQRS-单独的命令和事件处理程序,cqrs,Cqrs,回顾一下,一些命令和处理程序被分割成单独的接口 public interface CommandHandler<in T> { void Handle(T command); } public interface EventHandler<in T> { void Handle(T @event); } 公共接口CommandHandler { 无效句柄(T命令); } 公共接口事件处理程序 { 无效句柄(T@事件); } 我正在自动连接命令和事件,

回顾一下,一些命令和处理程序被分割成单独的接口

public interface CommandHandler<in T>
{
    void Handle(T command);
}

public interface EventHandler<in T>
{
    void Handle(T @event);
}
公共接口CommandHandler
{
无效句柄(T命令);
}
公共接口事件处理程序
{
无效句柄(T@事件);
}
我正在自动连接命令和事件,membus似乎有一个限制,它只能连接命令处理程序或事件处理程序,但无论哪种方式,它都让我思考:


如果两个接口都有句柄方法,那么以这种方式拆分命令和事件的想法是什么,当可以使用单个通用命令/事件
处理程序
接口时?

区别在于语义-事件和命令在语义上是不同的消息类型,将这种区别明确化是有益的。由于每种消息类型可能都有独特的处理要求,因此在组织和功能方面都有好处。

不同之处在于语义-事件和命令在语义上是不同的消息类型,明确这种区别是有益的。由于每种消息类型都可能有独特的处理要求,因此在组织和功能方面都有好处。

而且随着时间的推移,单个命令可能会产生多个事件,甚至是一种类型的事件,因为它的处理。我意识到这是一个非常古老的评论,但我只想指出,根据某些条件,单个命令生成一个事件或(独占)另一个事件有点反模式。同一个命令应始终导致相同的事件(或相同的多个事件),禁止命令处理程序通过聚合知道的某些状态检查/约束。而且随着时间的推移,单个命令可能会因其处理而产生多个事件,甚至一种类型的事件。我意识到这是一个非常古老的注释,但我只想指出,根据某些条件,单个命令生成一个事件或(独占)另一个事件有点反模式。同一命令应始终导致相同的事件(或相同的多个事件),禁止命令处理程序通过聚合知道的某些状态检查/约束。