为何要使用MVC+REST+CQRS架构
具体来讲,前端浏览器:angular.js等MVC框架;后端: REST + CQRS 。 angular.js等MVC框架是指前端浏览器的MVC框架,而不是相似Struts 或SpringMVC之类的服务器端后端MVC框架。 关于后端MVC框架的问题可见《MVC模式已死 》http://www.jdon.com/38448 和 基于任务的UI(Task-Based UI) 。 服务器端的MVC框架主要问题是粒度太粗,只能适合传统的CRUD简单粗放的应用,当咱们的软件系统转向以用户体验为主,而不是以企业自身资源管理为主的模式时,响应式设计必然拥有良好的用户感觉,而传统后端MVC固定的框架针对大量客户端并发事件处理无疑是力不从心,想象一下,用户鼠标一移动就可能发出一个事件,这么多事件若是每一个都走Model-View-Controller这样一个流程,仅Controller就要编制多少?编程成本极高,维护拓展起来很不方便。 将MVC框架移植到浏览器前端(Rich Client),则能够巧妙回避以上问题,javascript的函数风格使得其处理事件来得更简单,对于围绕模型的操做则可使用MVC实现。见:JavaScript大型可扩展的 设计模式 ,而模型则是从后端领域层以JSON方式推送过来。 后端架构是:REST+CQRS,将REST 和CQRS 组合在一块儿成为CQREST架构。 REST的好处是针对资源进行简单轻量的操做,REST核心两个概念是资源和状态,而咱们能够认为这个资源实际就是领域模型,一般是DDD 领域驱动设计中的聚合根Aggregate,而状态是则是聚合根的状态,驱动状态变化的是REST 的POST/PUT/GET/DELETE四个方法。这样REST 和DDD 无缝吻合在一块儿了。 再看看REST 的四个方法实际也分两种类型:读和写。其中POST/PUT/DELETE属于对领域模型资源进行写操做的命令,属于CQRS 的Command路线;而GET属于客户端发出Query查询,属于CQRS 的Query读路线。 这样REST 又和CQRS 无缝吻合在一块儿。 我曾经在《没有人真正理解REST or HTTP》http://www.jdon.com/41716 中说: 未来是否有一种技术思想,将DDD REST 以及面向函数三者完美捆绑一块儿,经过URL表明领域模型类图的结构关系,好比/forum/thread,表明Forum类的子类Thread,领域模型被显式地用URL表达出来,用户访问形式和咱们分析设计的模型合二为一,大道至简。 而时隔两年的今天已经实现了:《使用Yoga灵活实现REST 》http://www.jdon.com/45544 若是说DDD 的领域模型是核心,那么REST 就是核心外的轻量壳,而CQRS 则是壳和核心之间的组织,三者若有机体同样自然组合在一块儿,简单,易用,灵活,可伸缩,易于维护。 从缓慢的历史变化中咱们应该发现一个主脉方向:MVC + REST + CQRS ,如此坚决一路走来,无疑他们表明将来一种即将普及的主流架构风格。
欢迎关注本站公众号,获取更多信息