加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 如何用ASP.NET MVC命令查询责任分离(CQRS)?

发布时间:2020-12-15 19:36:15 所属栏目:asp.Net 来源:网络整理
导读:我一直在阅读约 Command Query Responsibility Segregation (CQRS).我很奇怪,这将如何与ASP.NET MVC工作?我认为CQRS的概念上听起来不错,肯定会引入一些复杂性(事件和消息模式)相比,“正常/常见”的方法。还有CQRS排序的想法在某些方面反对使用ORM。我试
我一直在阅读约 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/

解决方法

Cqrs使Web项目更容易。在获取网站,所有的查询将看起来像
“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部分非常无聊,但你可以通过添加一些帮助用户做出决定(可选择返回由jax使用的json)的代码,使它更有趣。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读