為什麼要使用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,如此堅定一路走來,無疑他們代表未來一種即將普及的主流架構風格。
參考:
J2EE死了 javacript + 後端JSON服務方式勝出 :http://www.jdon.com/44690
CQREST英文: http://prezi.com/svfmvrx9dq_x/cqrs-and-rest/
使用 Angular.js, Node.js 和 MongoDB開發簡單案例:http://www.jdon.com/45599
[該貼被admin於2013-07-20 19:21修改過]
相關文章
- 為什麼要使用微服務架構?微服務架構
- 架構C01: 什麼是架構?為什麼做架構?架構師需要做什麼?架構
- 為什麼以及如何要進行架構設計權衡?架構
- 為什麼要虛擬化,為什麼要容器,為什麼要Docker,為什麼要K8S?DockerK8S
- 為什麼要學資料結構?資料結構
- 微服務架構一直火,為什麼服務化要搞懂?微服務架構
- 重構模式(二)---- 為什麼要 Refactoring模式
- 為什麼我們要使用無伺服器架構伺服器架構
- 為什麼微服務架構需要聚合微服務架構
- 【Web】JavaWeb專案為什麼我們要放棄jsp?為什麼要前後端解耦?為什麼要前後端分離?2.0版,為分散式架構打基礎。 - CSDN部落格WebJavaJS後端解耦分散式架構
- 為什麼你總成為不了架構師?架構
- Java架構師的培訓要學習什麼?Java架構
- 為什麼要removeREM
- 為什麼要敏捷?敏捷
- 為什麼前端工程越來越愛使用 Monorepo 架構?前端Mono架構
- 為什麼需要改變RAN的架構?架構
- 創新工場王詠剛:為什麼 AI 工程師要懂一點架構?AI工程師架構
- 成為一名阿里P7Java架構師到底要學習什麼?阿里Java架構
- PHP架構師成長必須做些什麼?你要準備些什麼?PHP架構
- 為什麼要code reviewView
- 為什麼需要六邊形架構?- silkandspinach架構
- 譯文 | 為什麼軟體架構如此重要?架構
- 資料湖架構,為什麼需要“湖加速”?架構
- 為什麼要謹慎使用Linux find命令?Linux
- 為什麼說Java中要慎重使用繼承Java繼承
- 為什麼要學習和使用C語言?C語言
- HBase的架構設計為什麼這麼厲害!架構
- GC 為什麼要掛起使用者執行緒? 什麼愁什麼怨?GC執行緒
- Java架構-到底什麼才是業務架構?Java架構
- 為什麼要學習 RustRust
- 為什麼要學習 Julia
- 為什麼要指令重排序?排序
- 為什麼要學習 Vim?
- 為什麼要選擇SQL?SQL
- MySQL為什麼要set namesMySql
- 什麼是架構師架構
- 什麼是Lambda架構架構
- VIE架構是什麼架構