Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.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# 架构:简单的CQS_C#_Domain Driven Design_Command_Cqrs - Fatal编程技术网

C# 架构:简单的CQS

C# 架构:简单的CQS,c#,domain-driven-design,command,cqrs,C#,Domain Driven Design,Command,Cqrs,我正在考虑将CQS应用于我的ASP.NETMVC网站,但事情很简单。我不是说CQR,因为我想对查询和命令部分使用相同的数据源,所以我不需要事件源和其他更复杂的模式 因此,我的想法是: 查询和命令部分使用相同的数据库 对于查询部分,使用实体框架和WCF数据服务公开数据库视图,以便将特定视图返回给客户端,查询数据变得非常容易 对于命令部分,使用实体框架和单向WCF服务并使用DDD原则公开数据库表 我想实现的主要目标是: 通过单向服务操作执行并由富域模型处理的简单命令,客户机只需要传递执行该命令

我正在考虑将CQS应用于我的ASP.NETMVC网站,但事情很简单。我不是说CQR,因为我想对查询和命令部分使用相同的数据源,所以我不需要事件源和其他更复杂的模式

因此,我的想法是:

  • 查询和命令部分使用相同的数据库
  • 对于查询部分,使用实体框架和WCF数据服务公开数据库视图,以便将特定视图返回给客户端,查询数据变得非常容易
  • 对于命令部分,使用实体框架和单向WCF服务并使用DDD原则公开数据库表
我想实现的主要目标是:

  • 通过单向服务操作执行并由富域模型处理的简单命令,客户机只需要传递执行该命令真正需要的数据
  • 灵活查询简单视图,专为客户端的特定UI而设计

这有意义吗?

所以,回答你的问题,是的,我认为这有意义

我不知道你还要找什么。我认为你所采取的方法是有道理的,并且应该给你你想要做的事情

在我看来,CQS和CQR非常相似,其中CQR具有独立读写存储的概念(有些人甚至认为写存储可能不是必需的)。事件源并不是CQR的一部分——可以说,它是一个附加组件,非常适合CQR的分布式特性

您放弃的方法是数据的一些可伸缩性,因为您正在使用视图展平数据。但如果你的应用程序不需要它,那么就没有问题了

此外,阅读Udi Dahan关于何时避免CQR的文章可能会很有用。这可能有助于证明你的决定是正确的。当他把它放出来时,引起了相当大的轰动。但在他和Greg Young之间,他们是CQR的专家


我不确定我是否回答了你的问题或帮助了你,但祝你的项目好运!我希望这能有所帮助。

这对我来说很有意义。您不需要中小型系统的完整CQRS系统的分布模型和总线体系结构。谢谢,我想如果我需要某些部分的完整系统,这是可能的,因为我的接口已经分开了…是的。我认为最好先将系统发展成单独的关注点(扩展),然后自己使用CQR作为最后手段。您如何处理命令中的错误?我面临着与您相同的设置(WPF而不是ASP.NET),但我不确定该怎么办-我是否应该总是“假定”命令已成功?如果没有呢?我的命令可以抛出异常,这些异常由全局异常处理程序处理。谢谢你,我也读过这篇文章。我猜他是在说,你很少需要全面的CQR,甚至任何层次。我在这里部分同意,这就是我只想应用轻量级CQS的原因。但我认为,将查询与命令分离的模式使事情变得更简单,但因为这是一个重大的设计决策,我想确保这是一种有效的方法。我现在唯一不确定的是,是否在DB中使用Guid作为键,因为命令模式需要它,我担心性能。谢谢你的评论!命令端不需要guid…但这只是获取客户端唯一id的常用方法。通常,最好在发出命令之前获取id…guid非常方便。可以使用int或其他任何形式。这取决于你。希望这有帮助!“Guid作为DB中的键,因为命令模式需要它,我担心性能”-您可以使用对性能影响不大的顺序Guid,而不是INT/BIGINT。()@David:我觉得你的说法“通常在发出命令之前最好先得到id”很有趣。。。大卫:这个主意很有趣,我想到了两件事:1。这是一个额外的呼叫,这不影响性能吗?及:2。如果同时输入多个命令,如何确保为它们提供唯一的id?