核心結論先行
三層架構 ≠ MVC。 三層架構是軟體系統整體的分層式架構設計,適用於任何專案;MVC 是表現層內部的設計模式,根據專案具體需求決定是否採用。兩者層級不同、目的不同、劃分維度不同,卻常被初學者混淆。
一、根本概念區別
| 維度 | 三層架構 | MVC |
| 性質 | 架構模式 | 設計模式 |
| 範圍 | 整個應用系統 | 單一應用模組(通常是 Web 表現層) |
| 決策時機 | 專案啟動初期,架構設計階段 | 架構確定後,詳細設計階段 |
| 同級對比 | 微服務、單體、事件驅動架構 | MVP、MVVM、Clean Architecture 表現層變體 |
二、層次劃分對比
三層架構(邏輯分層)
- 表現層:UI、Controller、View、API 介面,負責接收請求、響應結果。
- 業務邏輯層:Service、Domain Service、Application Service,封裝核心業務規則、事務邊界、編排協調。
- 資料存取層:DAO、Repository、Mapper,封裝 SQL/ORM、連線池、快取、資料庫細節。
MVC(表現層內部分工)
- Model:領域模型、DTO、VO、表單資料——資料與業務規則的載體。
- View:JSP、Thymeleaf、React/Vue 模板、JSON 序列化——資料的視覺呈現。
- Controller:Spring MVC @Controller、Servlet、REST Endpoint——請求分發、參數綁定、調用 Service、選擇 View。
關鍵圖解:MVC 嵌套在三層架構的表現層內部
+--------------------------------------------------+
| Presentation Layer |
| +--------------------------------------------+ |
| | MVC | |
| | Controller <-> Service (BLL) <-> DAO (DAL)| |
| | ^ ^ ^ | |
| | | | | | |
| | View Model (Data) | |
| +--------------------------------------------+ |
+--------------------------------------------------+
| Business Logic Layer |
| (Service, Domain Model, Transaction Boundary) |
+--------------------------------------------------+
| Data Access Layer |
| (Repository, ORM, SQL, Connection Pool) |
+--------------------------------------------------+

三、目的側重點不同
- 三層架構:高內聚、低耦合,實現整體系統級解耦,便於分層開發、測試、替換實作(如換資料庫、換 UI 框架)。
- MVC:Web 系統職責分工,實現表現層內部解耦,分離「資料、介面、控制流」,便於前後端分工、單元測試 Controller、複用 Model。
四、為何常被混淆?
- 名稱相似:都是「三層」(UI/BLL/DAL vs View/Controller/Model),初學者直覺對號入座。
- 共生關係:實務中 MVC 幾乎總建立在三層架構之上,Controller 呼叫 Service,Service 呼叫 DAO,兩者同時出現,易誤以為是同一東西。
- 同為解耦手段:目的皆為降低耦合,初學者未深入體會「整體解耦」與「局部解耦」的層級差異。
五、實務最佳實踐
- 專案啟動先定三層架構(或更細分:四層、六邊形架構)。
- Web 專案在表現層採用 MVC(或 MVVM、Clean Architecture)。
- Controller 只做:參數校驗、呼叫 Service、異常捕獲、返回 View/JSON,不含 業務邏輯、SQL、事務控制。
- Service 層才是業務核心,包含事務邊界、領域模型操作、跨 DAO 編排。
- DAO/Repository 只負責單表/單聚合根的持久化操作。
總結
三層架構是「骨架」,MVC 是「表現層的肌肉與神經」。清晰區分兩者,才能在架構演進、團隊分工、技術選型時做出正確決策,避免「Controller 膨脹成 God Class」、「Service 淪為 DAO 轉發層」等反模式。