.NET三層架構(gòu)解析一:什么是三層架構(gòu)
所謂三層架構(gòu),是在客戶端與數(shù)據(jù)庫之間加入了一個“中間層”,也叫組件層。這里所說的三層體系,不是指物理上的三層,不是簡單地放置三臺機器就是三層體系結(jié)構(gòu),也不僅僅有B/S應(yīng)用才是三層體系結(jié)構(gòu),三層是指邏輯上的三層,即使這三個層放置到一臺機器上。
在項目開發(fā)的過程中,有時把整個項目分為三層架構(gòu),其中包括:表示層(UI)、業(yè)務(wù)邏輯層(BLL)和數(shù)據(jù)訪問層(DAL)。三層的作用分別如下:
表示層:為用戶提供交互操作界面,這一點不論是對于Web還是WinForm都是如此,就是用戶界面操作。我們網(wǎng)站展示給用戶看的界面。
業(yè)務(wù)邏輯層:負(fù)責(zé)關(guān)鍵業(yè)務(wù)的處理和數(shù)據(jù)的傳遞。復(fù)雜的邏輯判斷和涉及到數(shù)據(jù)庫的數(shù)據(jù)驗證都需要在此做出處理。根據(jù)傳入的值返回用戶想得到的值,或者處理相關(guān)的邏輯。
數(shù)據(jù)訪問層:見名知意,負(fù)責(zé)數(shù)據(jù)庫數(shù)據(jù)的訪問。主要為業(yè)務(wù)邏輯層提供數(shù)據(jù),根據(jù)傳入的值來操作數(shù)據(jù)庫,增、刪、改或者其它。
以下我簡單介紹下一個用戶管理模塊:
為了整個項目的開發(fā)方便,我們在項目中會建幾個類庫SQLHelper,BLL,DAL,Model和一個Web網(wǎng)站。為了命名清晰,我們可以這樣命名這個三個工程(即在解決方案里添加的類庫):
業(yè)務(wù)邏輯層(BusinessLogicLayer):BLL,命名空間默認(rèn)設(shè)置為BLL
數(shù)據(jù)訪問層(DataAccessLayer):DAL,命名空間默認(rèn)設(shè)置為DAL
SQL幫助類:SQLHelper,命名空間默認(rèn)設(shè)置為SQLHelper
另外我們?yōu)榱藬?shù)據(jù)傳遞的方便,通常再添加一個類庫,這個類庫是貫穿于整個三層架構(gòu)中的。即實體類。通常命名為Model,命名空間默認(rèn)值設(shè)置為:Models。其中封裝的每個類都對應(yīng)一個實體,通常就是數(shù)據(jù)庫中的一個表。如數(shù)據(jù)庫中的用戶表(custom)封裝為(custom),將表中的每個字段都封裝成共有的屬性。
這樣三層架構(gòu)的搭建就基本完成了。這三層有著非常強的依賴關(guān)系:
表示層 ← 業(yè)務(wù)邏輯層 ← 數(shù)據(jù)訪問層
他們之間的數(shù)據(jù)傳遞是雙向的,并且通常借助實體類傳遞數(shù)據(jù)。
那么三層架構(gòu)都有哪些優(yōu)點呢:
1、易于項目的修改和維護。在項目的開發(fā)過程中或者開發(fā)后的升級過程中,甚至在項目的移植過程中。這種三層架構(gòu)是非常方便的。比如項目從Web移植到Form,我們只需要將表示層重新做一遍就可以了。其余兩層不用改動,只需添加到現(xiàn)有項目就可以了。如果不采用這種架構(gòu),只是將代碼寫到表示層。那么所有的編碼幾乎都要重新來了。
2、易于擴展。在功能的擴展上同樣如此,如有功能的添加只需把原有的類庫添加方法就可了
3、易于代碼的重用。這一點就不用解釋了。
4、易于分工協(xié)作開
還可以加個接口類庫Iinterface, 加入設(shè)計模式,使你的代碼靈活性更好,質(zhì)量更高。
其實,當(dāng)我們做一個項目時,我們應(yīng)該先考慮一下這個項目是不是應(yīng)該應(yīng)用三層/多層設(shè)計時, 先得考慮下是不是真的需要? 實際上大部分程序就開個WebApplication就足夠了, 完全沒必要作的這么復(fù)雜. 而多層結(jié)構(gòu), 是用于解決真正復(fù)雜的項目需求的。
【編輯推薦】
- 淺析C#中三層架構(gòu)的實現(xiàn)
- 15.2.2 從三層架構(gòu)到N層架構(gòu)
- Java Web三層架構(gòu)的配置詳解
- 15.2 JSP網(wǎng)絡(luò)應(yīng)用程序的三層架構(gòu)模型





















