翟自強
【摘要】隨著ASP.NET應(yīng)用的普及,越來越多的軟件系統(tǒng)采用ASP.NET技術(shù)。然而很多中小WEB應(yīng)用都采用不分層的方式進(jìn)行開發(fā),導(dǎo)致了代碼的混亂。為日后的維護(hù)工作帶來了極大的困難。本文闡述了ASP.NET三層架構(gòu)的優(yōu)點和如何構(gòu)建三層架構(gòu)。
【關(guān)鍵詞】表示層(PL)業(yè)務(wù)邏輯層(BLL)實體(Entity)數(shù)據(jù)訪問層(DAL)
一、三層架構(gòu)概述
所謂三層架構(gòu)中的三層,指的是表示層(PL)、業(yè)務(wù)邏輯層(BLL)和數(shù)據(jù)訪問層(DAL):數(shù)據(jù)訪問項目執(zhí)行從數(shù)據(jù)庫(或其他數(shù)據(jù)服務(wù))獲取數(shù)據(jù)或向數(shù)據(jù)庫發(fā)送數(shù)據(jù)的功能。在分布式應(yīng)用程序結(jié)構(gòu)中,相應(yīng)功能使用ADO. NET數(shù)據(jù)適配器和SQL服務(wù)器存儲過程來完成。業(yè)務(wù)規(guī)則項目包含業(yè)務(wù)對象本身以及應(yīng)用于它們的規(guī)則。這也是主要業(yè)務(wù)對象所在的位置。它們實現(xiàn)業(yè)務(wù)實體或系統(tǒng)對象。系統(tǒng)的業(yè)務(wù)規(guī)則將在這些對象中編碼,盡管部分業(yè)務(wù)規(guī)則可能實際上已在數(shù)據(jù)庫的存儲過程和觸發(fā)器中進(jìn)行了編碼。
用戶界面項目是指在應(yīng)用程序中實現(xiàn)的客戶端。在分布式應(yīng)用程序結(jié)構(gòu)中,用戶服務(wù)可以是Web客戶端或Windows客戶端,這具體取決于特定的應(yīng)用程序。例如,在開發(fā)Web應(yīng)用程序時,可能需要提供具有標(biāo)準(zhǔn)Windows用戶界面或Web用戶界面。
二、三層架構(gòu)優(yōu)點
在三層架構(gòu)的軟件系統(tǒng)中,表示層(PL)即用戶界面(UI)、業(yè)務(wù)邏輯層(BLL)和數(shù)據(jù)訪問層(DAL)之間是相對獨立的。相鄰的兩層之間產(chǎn)生一定的聯(lián)系(即耦合),隔層是不會產(chǎn)生影響的。這樣當(dāng)任何一層發(fā)生改變的時候,只需做簡單的調(diào)整就可以了。降低了變更所帶來的影響,為后續(xù)的系統(tǒng)維護(hù)工作提供了便利。
三、三層架構(gòu)實例
下面將仍以“用戶登陸”為例,講述如何搭建三層架構(gòu)的應(yīng)用系統(tǒng)。
(一)在VS2008中搭建解決方案“MySchoolPro”。(1)在VS2008中建立名為“MySchoolPro”的解決方案;(2)建立名為“MySchool”的WEB項目;(3)建立名為“DAL”的類庫項目;(4)建立名為“BLL”的類庫項目;(5)在“BLL”項目中添加“DAL”引用;(6)在“MySchool”中添加“BLL”引用。
(二)在“DAL”中加入微軟的ADO封裝類“SqlHelper”;SqlHelper是一個基于.NET Framework的數(shù)據(jù)庫操作組件。組件中包含數(shù)據(jù)庫操作方法。
(三)添加實體類User。實體類是對業(yè)務(wù)實體的抽象、封裝,它與數(shù)據(jù)庫中的實體表相對應(yīng)。實體類User中不但包含了構(gòu)造函數(shù)、私有成員和屬性,也包含了與該實體相關(guān)的行為。在沒有實體類的情況下,數(shù)據(jù)的傳輸只能依靠DataSet。然而在DataSet中數(shù)據(jù)是以關(guān)系數(shù)據(jù)的形式存在,不具備OO的特點。對DataSet操作的代碼往往散落在BLL或UI之中,容易造成代碼的混亂。添加實體類之后各層之間都依靠實體來進(jìn)行消息傳遞,從而彌補了上述的不足。
下面將實體類(User)加入到解決方案“MySchoolPro”中:(1)在“MySchoolPro”中建立名為“Model”的類庫項目;(2)在“Model”中添加“DAL”引用;(3)在“MySchool”中添加“Model”引用;(4)在“Model”中加入User實體類(代碼同上)。
實體貫穿整個系統(tǒng),成為系統(tǒng)的業(yè)務(wù)基礎(chǔ)。這里需要加以區(qū)別的是業(yè)務(wù)實體層(Model)和業(yè)務(wù)邏輯層(BLL)之間的關(guān)系。業(yè)務(wù)實體層(Model)體現(xiàn)了業(yè)務(wù)域在系統(tǒng)的抽象;業(yè)務(wù)邏輯層(BLL)則實現(xiàn)為復(fù)雜邏輯提供服務(wù)。換句話說,業(yè)務(wù)邏輯層(BLL)實現(xiàn)了業(yè)務(wù)實體的組合調(diào)用。
(四)建立登陸頁面
由于“用戶登陸”功能僅涉及到用戶實體,所以不會在業(yè)務(wù)邏輯層(BLL)中編碼。下面在“MySchool”中建立Login.aspx,用戶登錄成功后跳轉(zhuǎn)到Default.aspx;否則提示用戶名密碼錯誤。
四、結(jié)語
三層架構(gòu)中包括:表示層(UI)、業(yè)務(wù)邏輯層(BLL)、數(shù)據(jù)訪問層(DAL),每層功能明確、相對獨立,層與層之間相互隔離,體現(xiàn)了“低耦合、高內(nèi)聚”的設(shè)計思想。
參考文獻(xiàn)
[1]梁立新著.項目實踐精解·ASP.NET應(yīng)用開發(fā):基于ASP.NET、C#和ADO.NET的三層架構(gòu)案例分析.電子工業(yè)出版社,2010年
[2] Matthew MacDonald著. ASP.NET高級程序設(shè)計.人民郵電出版社,2011年
[3] Christian Thilmany. NET模式:架構(gòu)設(shè)計與過程.中國電力出版社
[4] Jeffrey Richter. Microsoft. NET框架程序設(shè)計.清華大學(xué)出版社
[5] Martin L. Shoemaker UML實戰(zhàn)教程.清華大學(xué)出版社