33

我一直在阅读有关Command Query Responsibility Segregation (CQRS)的内容。我有点想知道这将如何与 ASP.NET MVC 一起使用?我从概念上理解了 CQRS 的概念,它听起来不错,并且与“正常/常见”方法相比确实引入了一些复杂性(事件和消息传递模式)。在某些方面,CQRS 的想法也有点反对使用 ORM。我试图思考如何在接下来的项目中使用这种模式,所以如果有人有将 CQRS 与 ASP.NET MVC 和 NHibernate 结合的经验,请给出一些具体的例子来帮助我更好地理解 CQRS 并与 ASP.NET MVC 一起使用。谢谢!

更新:我一直在浏览 Mark 的示例代码。如果您正在学习 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/

4

6 回答 6

25

请查看我在 CodePlex 上的DDDsample.Net项目。GUI 使用 ASP.NET MVC 实现,而业务逻辑使用 DDD 实践,有 4 种不同的变体:

  • 经典(无 CQRS)
  • 具有两个 NHIbernate 关系数据存储的 CQRS
  • 在报告端使用 LINQ to SQL 的 CQRS
  • 在命令端使用事件溯源的 CQRS
于 2010-03-08T18:26:13.647 回答
18

Cqrs 使 web 项目更容易。在 get 站点上,所有查询看起来都像“select * from table where 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 将使编写应用程序的 Web 部分变得非常无聊,但您可以通过添加一些帮助用户做出决定的代码(可选地返回 ajax 使用的 json)来使其更有趣。

于 2010-03-08T20:05:33.537 回答
4

看看我在http://agrcqrs.codeplex.com的尝试,它是 ASP.NET MVC + NHibernate

于 2010-03-13T18:29:43.637 回答
0

这是我为我的 CQRS lib Scritchy编写的完整示例:

使用Scritchy nuget 包创建 CQRS 应用程序非常简单,只需几分钟即可启动并运行

于 2011-11-07T12:39:50.377 回答
0

在以下帖子中,您可能会发现有趣的资源:如何将 CQRS 应用于项目

我发现特别有趣的是微软的CQRS Journey。它对 Windows Azure 的依赖可能看起来令人失望,但是等等……它在 SQL Server 中很好地实现了事件存储和企业服务总线。您会在 Demo App 源代码中找到很多注释,警告您不要在生产环境中使用 SQL 实现……但是通过一些调整,您可以使其适应您的项目。我做到了,而且效果非常好。

代码很干净(来自微软模式和实践的人)。您将找到一个很好的示例,说明如何使用依赖注入(使用 Unity)、简单但有效的企业服务总线(使用 SQL Server 和 ADO.NET,使用并行线程)、使用实体框架的读取模型等等。我从中学到了如何做 CQRS 和事件溯源......记住:这一切都与事件有关

于 2015-01-06T13:10:27.243 回答
0

这是一个迟到的回应,但它可能对正在寻找如何在 ASP.NET Core 中实现 CQRS 架构模式并且令人惊讶地没有找到任何合适的中间件的人有所帮助。在我的发现过程中,我决定分享我的发现并最终写了一系列关于如何通过 HTTP 进行 CQRS 的文章。

  1. CQRS:介绍
  2. CQRS:通过 HTTP 命令
  3. CQRS:通过 HTTP 查询

除了理论方面,在编写过程中,我设法构建了两个即用型独立中间件,旨在帮助您在 ASP NET Core 项目中采用 CQRS。HTTP 命令HTTP 查询

希望对您有所帮助,如果您有任何疑问,请不要犹豫,给我留言。

于 2020-03-10T10:19:52.520 回答