怎么命令查询职责分离(CQRS)与ASP.NET 视?
-
18-09-2019 - |
题
我已经阅读有关 命令查询职责分离(CQRS).我不知道怎么会这工作ASP.NET 视?我得到想法的CQRS从概念上讲它听起来不错,肯定不会介绍一些复杂问题(事件和消息模式)相比,"常常"的做法。还想CQRS种反对使用对象在一些方面。我在想我怎么可能使用这种模式在未来的项目,因此如果任何人有经验相结合的CQRS与ASP.NET 视,并请它能够得到一些具体的例子,以帮我更好的理解CQRS和使用ASP.NET 视.谢谢!
更新:我已经去过标记的样本代码。这是一个必须阅读,如果你正在学习CQRS.
http://github.com/MarkNijhof/Fohjin
http://cre8ivethought.com/blog/2009/11/12/cqrs--la-greg-young/
http://cre8ivethought.com/blog/2009/11/28/cqrs-trying-to-make-it-re-usable/
解决方案
CQRS使得Web项目要容易得多。在获得站点,所有的查询将看起来像 “SELECT * FROM表其中id = @id”)。对于那些简单的查询,您将不再需要像NHiberante一个ORM。您没有使用SQL数据库,当你愿意,你可以序列化的对象到数据库表,或使用的命名惯例。您仍然可以通过NHibernate的查询读取数据库,但是你不会从中得到任何好处,因为所有的疑问将是相同的。
public class Controller
{
public ActionResult Get(Guid id)
{
var viewModel = reportingDatabase.Get(id);
return View(viewmodel);
}
}
在命令侧,控制器将看起来像这样:
public class Controller
{
public ActionResult Post(SomeForm form)
{
// do validation
var command = new SomeCommand(form.Property1, form.Property2);
bus.Send(command);
return redirecto(something else);
}
}
在控制器只是发送一条消息,它不知道在哪里的消息去,什么消息的结果。这样做的MVC部分是程序非常简单。 CQRS将使编写应用程序的网络部分很枯燥,但你可以把它更多的乐趣,加入一些代码,帮助用户作出决定(可选返回由AJAX使用JSON)。
其他提示
请看看我的 DDDsample.Net 项目上更.GUI是实施使用ASP.NET 视,同时业务逻辑使用DDD做法在4个不同的变体:
- 经典(没有CQRS)
- CQRS它能够与两个关系数据存储
- CQRS与皇宫SQL在报告侧
- CQRS与事件的采购指令侧
和看看我的企图在 http://agrcqrs.codeplex.com ,这是ASP .NET MVC + NHibernate的
这里是一个完整的例子,我写了 我CQRS lib Scritchy:
- 例。域:域执行情况
- 例。规格 :域的行为规范使用MSpec
- 例。网 :例视网的应用程序(在演示 http://scritchyExample.apphb.com )
- 例。访 :例html/Javascript/访的网应用程序(采用相同的域名代码)
创建你的CQRS应用程序的使用 该Scritchy nuget 是很简单 让你的建立和运行几分钟
在下面的帖子你可能会感兴趣的资源:如何适应CQRS到项目
,我发现特别有趣的一个是 CQRS旅程从微软。它看起来可能令人失望,其与Windows Azure的依赖,但等待......它在SQL Server的一个非常好的执行事件存储和企业服务总线。你会发现有很多的警告您对在生产中使用SQL的执行演示程序源代码注释...但有一些调整,你可以使其适应你的项目。我做到了,和它的作品非常,非常好。
代码是干净的(它是由从微软模式和实践的球员)。你会发现如何使用依赖注入(使用Unity),一个简单而有效的企业服务总线(与SQL Server和ADO.NET,与并行线程),与实体框架和更大量的读取模式一个很好的例子。我从中学到了如何做CQRS和事件采购...请记住:它的所有活动。