我一直在阅读约
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查询读取的数据库,但是你不会从中获得任何好处,因为所有的查询都是一样的。
“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)的代码,使它更有趣。