爲何要使用MVC+REST+CQRS架構

具體來講,前端瀏覽器:angular.js等MVC框架;後端: RESTCQRS

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,將RESTCQRS組合在一塊兒成爲CQREST架構。

REST的好處是針對資源進行簡單輕量的操做,REST核心兩個概念是資源和狀態,而咱們能夠認爲這個資源實際就是領域模型,一般是DDD領域驅動設計中的聚合根Aggregate,而狀態是則是聚合根的狀態,驅動狀態變化的是REST的POST/PUT/GET/DELETE四個方法。這樣RESTDDD無縫吻合在一塊兒了。

再看看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靈活實現RESThttp://www.jdon.com/45544

若是說DDD的領域模型是核心,那麼REST就是核心外的輕量殼,而CQRS則是殼和核心之間的組織,三者若有機體同樣自然組合在一塊兒,簡單,易用,靈活,可伸縮,易於維護。

從緩慢的歷史變化中咱們應該發現一個主脈方向:MVC + REST + CQRS,如此堅決一路走來,無疑他們表明將來一種即將普及的主流架構風格。

相關文章
相關標籤/搜索