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