爲何要使用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 ,如此堅決一路走來,無疑他們表明將來一種即將普及的主流架構風格。
歡迎關注本站公眾號,獲取更多信息