企業級 Web 應用四層架構
良好設計的 Web 應用按職責分為四層,各層隔離、透過介面通訊:
| 層次 | 職責 | 不應包含 |
| 表現層 | 請求/響應處理、委派業務邏輯、異常處理、裝配視圖模型、UI 驗證 | JDBC 調用、業務邏輯、事務管理 |
| 業務層 | 業務邏輯/驗證、事務管理、層間介面、依賴管理、提供服務給表現層 | 直接資料庫操作、表現邏輯 |
| 持久層 | CRUD、進階 ORM(關聯、繼承、多態)、事務支援 | 業務邏輯、表現邏輯耦合 |
| 領域模型層 | 業務實體對象(Order、Product 等),跨層流動,避免 DTO 轉換損失事務上下文 | — |
Struts 在表現層的定位
- 管理請求響應、委派業務邏輯、處理上游異常、裝配模型、UI 驗證
- 禁忌:Action 中混入 JDBC、業務邏輯、事務管理 → 導致緊耦合、維護負擔
Hibernate 在持久層的優勢
- 基於 POJO 與 Java Collections 的透明持久化
- 支援主流 SQL 資料庫、父子關係、事務、繼承、多態
- 非侵入式:不綁定 IDE、不污染領域模型
- 消除手寫持久層框架的高開發成本與功能缺失
Spring 在業務層的角色
作為微容器,基於依賴注入 (DI)/控制反轉 (IoC) 管理對象關係:
- 透過 XML 配置連接:事務管理器、DAO、服務對象、對象工廠
- Setter 注入(主流)與建構子注入
- 提供聲明式事務管理(AOP)、統一 J2EE 服務抽象
整合策略:Struts + Spring + Hibernate
- 表現層:Struts Action 僅委派,不含業務邏輯
- 業務層:Spring 管理 Service、事務、依賴
- 持久層:Hibernate DAO 實作資料存取
- 領域模型:POJO 實體跨層流動,Hibernate 直接映射
關鍵設計原則
- 各層鬆耦合,介面隔離
- 持久邏輯不滲漏至表現層(JSP/Servlet 不直接呼叫 DAO)
- 業務邏輯不滲漏至持久層
- 框架可替換性:Hibernate 可換為其他 ORM,不影響上層代碼
結語
框架整合的核心在於:每層以鬆耦合方式暴露介面,隱藏底層技術細節。本文架構可替換任一框架達到同等效果。