一、分層模型基礎理論
模型是一種常見的軟件設計架構,它將軟件系統按照功能劃分為不同的層次,每個層次都有特定的職責和功能,層與層之間存在清晰的依賴關系。這種架構有助于提高軟件的可維護性、可擴展性和可復用性。
常見分層結構
雖然不同的應用場景和系統可能會有不同的分層方式,但比較經典的是分為四層,分別為表示層、業務邏輯層、數據訪問層和數據層。
分層架構的一個特性就是關注分離(separation of concerns)。在層中的組件只負責本層的邏輯。組件的劃分很容易讓它們實現自己的角色和職責,也比較容易地開發,測試管理和維護。
1. 表示層(Presentation Layer)
定義:也稱為用戶界面層(UI 層),是用戶與系統進行交互的接口。它負責接收用戶的輸入,并將系統的處理結果展示給用戶。
職責:提供友好的用戶界面,處理用戶的請求和操作,如頁面渲染、事件處理等。
實現技術:在 Web 應用中,通常使用 HTML、CSS、JavaScript 等前端技術實現;在桌面應用中,可能使用 JavaFX、Swing(Java)、Windows Forms(.NET)等技術。
示例:在一個電商網站中,商品列表頁面、購物車頁面等都是表示層的一部分,用戶可以通過這些頁面瀏覽商品、添加商品到購物車等。
2. 業務邏輯層(Business Logic Layer)
定義:也稱為領域層,是系統的核心層,負責處理業務邏輯和業務規則。它接收來自表示層的請求,調用數據訪問層獲取數據,進行業務處理,并將處理結果返回給表示層。
職責:實現系統的業務邏輯,如訂單處理、用戶認證、權限管理等。確保業務規則的一致性和正確性。
實現技術:可以使用各種編程語言和框架來實現,如 Java 的 Spring 框架、Python 的 Django 框架等。
示例:在電商系統中,當用戶提交訂單時,業務邏輯層會檢查庫存是否充足、計算訂單總價、生成訂單記錄等。
3. 數據訪問層(Data Access Layer)
定義:也稱為持久化層,負責與數據庫或其他數據存儲系統進行交互,實現數據的增刪改查操作。它將業務邏輯層的請求轉換為對數據存儲系統的具體操作。
職責:封裝數據訪問細節,提供統一的數據訪問接口,提高數據訪問的效率和安全性。
實現技術:使用數據庫訪問技術,如 JDBC(Java)、ADO.NET(.NET)、SQLAlchemy(Python)等。
示例:在電商系統中,數據訪問層負責從數據庫中查詢商品信息、保存用戶訂單信息等。
4. 數據層(Data Layer)
定義:也稱為數據存儲層,負責存儲系統的數據。可以是關系型數據庫(如 MySQL、Oracle)、非關系型數據庫(如 MongoDB、Redis)、文件系統等。
職責:提供數據的持久化存儲,確保數據的安全性和完整性。
示例:在電商系統中,數據層存儲了商品信息、用戶信息、訂單信息等。
- 注意每一層都是封閉的。這意味著Request必須經過每一層才能到達最底下一層。
- 這就是分層架構的另一個特征:層隔離(layers of isolation)。層隔離的概念意味著你對任何一層的改變都不會影響其它層。一個層的組件并不會了解其它層的實現,或者知道很少。
- 分層架構也很容易增加新的層。 比如你想將一些通用的服務重構成一個服務層,比如通用圖片處理,遠程賬戶審計等,可以在業務層下增加一個服務層。它不會對展示層造成影響,也不會改變持久層的代碼。
- 因為每一層丟失封閉的,業務層不得不通過服務層訪問持久層,這沒有天理啊。 所以有時候你會創建一個開放的層。這意味著上一層可以繞過這一層直接訪問下一層。
典型場景包括:
- OSI網絡模型(物理層→應用層7層結構)
- J2EE經典分層(Web層→Service層→DAO層)
2. 核心原則
單向依賴:Layer N只能調用Layer N-1(嚴格分層)或更底層(寬松分層)
契約協議:層間通過標準化接口通信(如REST API、RPC接口)
同層自治:每個層級內部實現技術無關性(如DA層可替換MySQL為MongoDB)