一直以為 MVC 和三層架構(gòu)是同一個(gè)東西,直到今天才明確的知道:MVC 是 MVC,三層架構(gòu)是三層架構(gòu), 它們之間毫無(wú)關(guān)系。
三層架構(gòu)
三層架構(gòu)是系統(tǒng)級(jí)別的,基于業(yè)務(wù),如下圖:
整個(gè)過(guò)程:展示層發(fā)送請(qǐng)求到 Controller,Controller 收到請(qǐng)求后交給相應(yīng)的 Service 去查詢對(duì)應(yīng)的數(shù)據(jù),并將結(jié)果返回給展示層,最后展示層將數(shù)據(jù)顯示在頁(yè)面上。
三層架構(gòu)是為了解決整個(gè)應(yīng)用程序中各個(gè)業(yè)務(wù)過(guò)程中不同階段的代碼封裝問(wèn)題,包括:展示層、業(yè)務(wù)邏輯層、持久層。其中, 低層不能調(diào)用上層;同層之間可以互相調(diào)用(持久層、Controller 除外)。
特點(diǎn):
- 低耦合
- 可維護(hù)
- 有了利于軟件工程化管理
缺點(diǎn):
- 內(nèi)部結(jié)構(gòu)復(fù)雜,不容易理解,文件數(shù)量大。
MVC
MVC 用于創(chuàng)建在域?qū)ο蠛?UI 表示層對(duì)象之間的區(qū)分,基于展示層的設(shè)計(jì)模式。

M:Model(模型層),主要負(fù)責(zé)業(yè)務(wù)邏輯以及數(shù)據(jù)庫(kù)的交換
V:View(視圖),用于顯示數(shù)據(jù)和提交數(shù)據(jù)
C:Controller(控制器),用于捕獲請(qǐng)求并控制請(qǐng)求轉(zhuǎn)發(fā)
各部分之間的通信都是雙向的。View 與 Model 不發(fā)生聯(lián)系,都通過(guò) Presenter 傳遞。View 非常薄,不部署任何業(yè)務(wù)邏輯。
各個(gè)層的作用:
- 控制器的作用是調(diào)用模型,并調(diào)用視圖,將模型產(chǎn)生的數(shù)據(jù)傳遞給視圖。并讓相關(guān)視圖去顯示。
- 模型的作用是獲取數(shù)據(jù)并處理數(shù)據(jù)。
- 視圖的作用是將取得的數(shù)據(jù)進(jìn)行組織、美化等,并最終向用戶終端輸出。
好處:分離了關(guān)注點(diǎn)。后臺(tái)代碼被移到單獨(dú)的類文件,可以最大限度的重復(fù)利用代碼。
缺點(diǎn):
- 不適合小型應(yīng)用
- 增加系統(tǒng)結(jié)構(gòu)和實(shí)現(xiàn)的復(fù)雜性
聯(lián)系與區(qū)別
- 聯(lián)系
- V 相當(dāng)于展示層;C 相當(dāng)于展示層和業(yè)務(wù)邏輯層之間的 Controller;M 相當(dāng)于業(yè)務(wù)邏輯層和持久層。

- 都是為了解耦
- 區(qū)別
- 三層架構(gòu)試試軟件架構(gòu),通過(guò)接口實(shí)現(xiàn)
- MVC 是一個(gè)設(shè)計(jì)模式——解決方案
- 三層模式試試體系結(jié)構(gòu)模式,MVC 是設(shè)計(jì)模式
MVC 和 三層架構(gòu)相同的設(shè)計(jì)理念就是:把視圖設(shè)計(jì)與數(shù)據(jù)持久化進(jìn)行分離,從而降低耦合性,易于擴(kuò)展,提高團(tuán)隊(duì)開(kāi)發(fā)效率。三層架構(gòu)和 MVC 設(shè)計(jì)模式側(cè)重點(diǎn)不一樣,三層是一種籠統(tǒng)的架構(gòu)思想,沒(méi)有限制具體的設(shè)計(jì);而 MVC 就比較具體的說(shuō)明它的設(shè)計(jì)方法。