Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.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
C# CQRS与ES设计查询_C#_Wcf_Cqrs - Fatal编程技术网

C# CQRS与ES设计查询

C# CQRS与ES设计查询,c#,wcf,cqrs,C#,Wcf,Cqrs,这更多的是一个设计问题,所以如果这是在错误的地方道歉。也就是说,我正在设计一个由WPF用户界面和WCF服务层组成的应用程序,WCF服务层提供对应用程序数据和业务逻辑的访问。我有几个场景需要CQR和ES,这就是我的问题的来源 CQRS是关于命令和查询分离的,所以我的问题是我的WCF服务是否也应该分离,这样我就可以在一个服务中使用命令方法,在另一个服务中使用查询方法。例如: public class PatientCommandService { public void AddPatient

这更多的是一个设计问题,所以如果这是在错误的地方道歉。也就是说,我正在设计一个由WPF用户界面和WCF服务层组成的应用程序,WCF服务层提供对应用程序数据和业务逻辑的访问。我有几个场景需要CQR和ES,这就是我的问题的来源

CQRS是关于命令和查询分离的,所以我的问题是我的WCF服务是否也应该分离,这样我就可以在一个服务中使用命令方法,在另一个服务中使用查询方法。例如:

public class PatientCommandService
{
    public void AddPatient(AddPatientDto patient) { }
}

public class PatientQueryService
{
    public PatientDto GetById(int id) { }
}
我是CQR和ES的新手,在互联网上很难找到任何可以回答这个问题的有形的东西,特别是在WCF和WebAPI等web服务方面

将所有服务方法放在同一个服务中,并在每个服务方法的实现中通过存储库层分离命令和查询,这似乎是明智的。但这似乎违背了CQR的分离部分,我也与围绕单一责任的坚实原则相冲突


是否有人在WCF服务背后实现了CQR并处理了这种情况,我正在寻求一些关于实现CQR的最佳方法的建议。

CQR不是关于命令/查询分离,而是关于责任分离。有了CQRS,您的数据库不再是ACID,而是一种最终的一致性方法

原因是读/写代码是分开的,这也意味着必须使用来自写模型的事件填充读模型

Your write transaction -> change event is published -> read model updates it's data
我强烈建议您在UI中采用基于任务的方法。命令应该包装业务事务,而不是数据库操作。我的意思是,一个命令通常涉及多个根聚合


如果这对您不起作用,只需使用审计表,而不是引入CQR带来的所有复杂性。

您可以在不具备最终一致性的情况下执行同步CQR。