.NET常見的幾種項目架構模式,你知道幾種?
前言
項目架構模式在軟件開發中扮演著至關重要的角色,它們為開發者提供了一套組織和管理代碼的指導原則,以提高軟件的可維護性、可擴展性、可重用性和可測試性。
三層架構
三層架構是一種經典的軟件架構模式,它將應用程序分為三個主要層次:表示層(UI)、業務邏輯層(BLL)和數據訪問層(DAL)。
圖片
分層職責
- 表示層(UI):負責用戶界面和用戶交互,是用戶直接接觸的部分。
- 業務邏輯層(BLL):處理業務規則和業務邏輯,是應用程序的核心部分。它負責數據的處理、驗證、計算等業務操作。
- 數據訪問層(DAL):負責與數據庫的交互,包括數據的CRUD(創建、讀取、更新、刪除)操作。
MVC架構
MVC架構模式將一個應用區分為三部分主要組件:模型、視圖、與控制器。這種模式有助實現關注分離,使用這種模式,用戶請求被路由到控制器,控制器負責與模型協作以執行用戶操作和/或返回請求結果。極大地提高了應用程序的可維護性和擴展性。
圖片
分層職責
- 模型(Model):表示應用程序和任何應由其執行的業務邏輯或操作的狀態。業務邏輯應與保持應用程序狀態的任何實現邏輯一起封裝在模型中。
- 視圖(View):負責通過用戶界面展示內容。它們使用 Razor 視圖引擎在 HTML 標記中嵌入 .NET 代碼。視圖中應該有最小邏輯,并且其中的任何邏輯都必須與展示內容相關。
- 控制器(Controller):處理用戶交互、使用模型并最終選擇要呈現的視圖的組件。在 MVC 應用程序中,視圖僅顯示信息;控制器處理并響應用戶輸入和交互。在 MVC 模式中,控制器是初始入口點,負責選擇要使用的模型類型和要呈現的視圖。
DDD分層架構
領域驅動設計(Domain-Driven Design,簡稱DDD)是一種軟件設計方法和理念,由Eric Evans在2004年提出。它通過深入理解業務領域,將復雜的業務邏輯轉化為可維護、可擴展的軟件系統。DDD的核心在于建立一個豐富的領域模型,這個模型能夠反映業務實體、業務規則和業務流程。
DDD 強調以領域模型為核心來驅動軟件的設計和開發。
圖片
分層職責
- 表示層(UI): 負責處理用戶界面和用戶交互,它可以是Web界面、移動應用程序或桌面應用程序等形式。表示層負責接收用戶的輸入和展示數據給用戶,但它不包含業務邏輯。
- 應用層(Application): 表示層與領域層的中介,編排業務對象執行特定的應用程序任務,使用應用程序邏輯實現用例。
- 領域層(Domain): 包含業務對象以及業務規則,是應用程序的核心。領域層的設計應遵循領域驅動設計的原則,通過深入理解業務領域,將業務知識和業務邏輯封裝在領域模型中,以提高軟件系統的可維護性和可擴展性。
- 基礎設施層(Infrastructure): 提供技術基礎設施支持,如數據庫訪問、消息隊列、緩存等。
整潔架構
整潔架構(Clean Architecture)是一種軟件架構設計原則,由羅伯特·C·馬丁(Robert C. Martin)提出,它旨在使軟件系統更加靈活、可維護和可測試,其核心目標是構建一種簡潔、靈活且易于維護的系統結構。
圖片
分層職責
- 實體層(Entities):實體層代表了系統中的核心業務概念和對象。這一層包含了那些在整個系統的生命周期中持續存在且具有明確業務含義的實體。
- 用例層(Use Cases):用例層包含了系統的具體業務邏輯和用例。它協調實體層和其他層之間的交互,以實現特定的業務功能。
- 接口適配器層(Interface Adapters):接口適配器層將用例層與外部系統(如數據庫、用戶界面、外部服務等)進行連接。它將外部系統的接口轉換為用例層可以理解的形式,并將用例層的輸出轉換為適合外部系統的格式。
- 框架與驅動層(Frameworks and Drivers):框架與驅動層包含了外部的框架和工具,如數據庫、Web 框架、消息隊列等。這一層通常是由具體的技術實現組成,為上層提供基礎設施支持。
CQRS架構
CQRS(命令和查詢責任分離)是一種架構模式,旨在將一個系統的讀操作(查詢)和寫操作(命令)分離開來。通過這種分離,系統可以在處理讀寫請求時進行不同的優化,從而提高系統性能、可擴展性和維護性。
圖片
分層職責
- Presentation(表現層):負責處理用戶界面的請求和響應。它接收用戶輸入并將其傳遞給后端服務,同時將后端服務的響應展示給用戶。
- Validation(驗證):在命令被處理之前,對用戶輸入的數據進行驗證,確保數據的合法性和完整性。
- Commands(命令):封裝用戶請求的寫操作,如創建、更新或刪除數據的操作。
- Domain Logic(領域邏輯):執行核心業務邏輯和規則,命令處理器通常會調用領域模型和領域服務來執行業務邏輯,確保業務規則得到正確應用。
- Data Persistence(數據持久化):在命令處理完成后,數據會被保存到寫數據存儲中,確保數據的一致性和持久性。
- Write Data Store(寫數據存儲):寫數據存儲負責管理所有寫操作的數據,包括事務處理和數據一致性。
- Read Data Store(讀數據存儲):讀數據存儲優化了讀取操作的性能,提供快速響應的查詢結果。
- Queries(查詢):查詢對象被傳遞給查詢處理器,查詢處理器直接從讀數據存儲中獲取數據,并生成DTOs返回給展示層。
最后總結
每種項目架構模式都有其各自特點和適用場景,開發者應根據項目的具體需求和技術棧來選擇最合適的項目架構模式。