MVC和三層架構有何區別和聯繫?


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 和伺服器端有哪些差別?

TAG:軟體 | 編程 | 架構 | MVC | 設計模式 |