MVC和三層架構有何區別和聯繫?
01-05
MVC是設計模式,屬於微觀的解決方案(如『博客』這一特定應用)。
3 Tier是系統架構,屬於宏觀的解決方案(如『網路』這一巨大的領域)。3 Tier的三層是指(在client-server的語境下):Presentation Tier,指客戶端。Business Tier,指伺服器。
Data Tier,指資料庫。N層結構 = MVC層 + Service/Manager/Logic層 + DAO層
一個常見的J2EE項目:- users.jsp (V)
- UserController.java (C)
- UserService.java (Service層)
- UserDao.java (DAO層)
- User.java (M)
MVC指的是presentation層面的模式,多層架構更多是指整個系統的設計方法,而通常presentation只是多層中的一層。
瀉藥。mvc是微觀結構,同一個程序員能接觸到的東西;而三層架構是宏觀結構,分別需要三個不同職能的程序員來維護。
從一個比較學術而非工程的角度來講,我將分三部分討論。
1 模式/架構的產生背景,面臨的問題;
2 針對面臨的問題提出的解決方案;
3 二者的對比。
如果只想知道區別與聯繫可以直接看第三部分。
MVC 模式
產生背景:
對用戶界面進行管理的程序的職責混亂導致代碼難以維護。解決方案:
將對數據的操作 M 與對視圖V的操作分離開,用C 邏輯作為二者的粘合劑。3-tiers 架構
產生背景:
所有應用程序都是用來處理數據的,程序的入口數據可以通過介面互動式輸入或者從磁碟等地方讀取,程序的輸出結果作為現實或存儲在磁碟上。上世紀九十年代之前,除了大型的系統外,應用程序讀取處理並存儲數據都是在一台機器上進行的。但是,從九十年代起,由於數據的爆炸性增長,一台機器上可以存儲的數據不能滿足應用程序的需求。於是,人們對原有程序進行了水平分層,將數據分離到資料庫伺服器上,應用程序從網路上讀取數據。這就是 2-tiers 架構,客戶端應用程序和資料庫伺服器。這種架構依然存在一些缺點,例如,無法緩解支持很多應用程序的客戶端的負載; 客戶端越來越複雜; 客戶端和伺服器之間頻繁的通信對帶寬要求高,限制了網路的大小等。總的來說就是,由於原有業務的複雜度提升,客戶端和伺服器端的職能需要調整,從而實現負載均衡,使系統具有良好的伸縮性。解決方案:
客戶端的應用程序用於展示,是展示層,業務層進行邏輯運算的支持,數據層存儲和操作數據。由於這種架構對原有程序進行了分層,不同的層運行在不同的機器上,所以可以非常自然地支持分散式開發。聯繫:
- 初看起來比較像,容易搞混(如果這也算聯繫的話);- MVC 模式可以用於3-tiers 架構的展示層。
區別:
關注的重點不同:MVC 關注的重點在於表現層的代碼組織方式,通過降低代碼間的耦合度,使代碼更改維護。3-tires 關注系統的分布,便於提升系統性能,增加系統功能。拓撲結構不同:
MVC 是可以三角結構,視圖向控制器發送更新,控制器更新模型,視圖可以直接從模型更新。
3-tires 一定是是線性結構,展示層即客戶端不能直接與數據層通信,也就是說客戶端展示層與數據層的通信必須經過中間層即業務層。相關鏈接:
Model-view-controller - Wikipedia
what is the difference between 3 tier architecture and a mvc?
我上課的PPT(P35 P36 P37)
一個很詳細的介紹 n-tiers 架構的PPT的下載鏈接(法語版)
推薦閱讀:
※你對MVC、MVP、MVVM 三種組合模式分別有什麼樣的理解?
※AngularJS 沒有元素選擇器算不算一個缺點?
※Backbone.js 的最佳應用場景有哪些?
※關於mvc的理解?
※前端 MVC 和伺服器端有哪些差別?