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