摘 要:程序設(shè)計(jì)追求的是代碼的通用性,可移植性,可維護(hù)性、功能可擴(kuò)展性,那么如何才能實(shí)現(xiàn)呢?首先需要大量的實(shí)踐經(jīng)驗(yàn),其次對(duì)面向?qū)ο缶幊趟枷氲纳钊肓私?。本文詳?xì)論述了通過ObjectDataSource和LINQ to XML開發(fā)了一個(gè)典型的基于三層架構(gòu)的XML留言板網(wǎng)站。
關(guān)鍵詞:三層架構(gòu);留言板;XML技術(shù)
中圖分類號(hào):TP311.52
注冊(cè)用戶登錄網(wǎng)站后,可以在網(wǎng)站首頁查看用戶的留言內(nèi)容,還可以通過發(fā)表留言頁面發(fā)表留言信息,而以管理員身份登錄網(wǎng)站后還可以刪除指定的留言信息。在網(wǎng)站首頁提供了具體的導(dǎo)航功能?;赬ML技術(shù)的留言本首頁運(yùn)行效果如圖1所示。
1 設(shè)計(jì)思想概述
1.1 三層架構(gòu)模式設(shè)計(jì)思想。在網(wǎng)站開發(fā)過程中,需求是不斷發(fā)生變化的,給網(wǎng)站設(shè)計(jì)出一個(gè)良好的架構(gòu),會(huì)給網(wǎng)站以后的開發(fā)帶來很好的擴(kuò)展性,而三層架構(gòu)的數(shù)據(jù)庫Web應(yīng)用程序,將用戶的界面與數(shù)據(jù)庫的邏輯完全分離在不同的層面中,Web應(yīng)用程序界面不再直接與后臺(tái)的數(shù)據(jù)庫相連接,而是直接與業(yè)務(wù)邏輯層相關(guān)聯(lián)。然后業(yè)務(wù)邏輯層在與數(shù)據(jù)庫相連接。通過這個(gè)業(yè)務(wù)邏輯層,用戶界面與SQL語句實(shí)現(xiàn)了分離,便于系統(tǒng)的擴(kuò)展與維護(hù)。
在三層架構(gòu)開發(fā)中,各個(gè)層之間的分工是很明確的,就像公司中的部門,每個(gè)部門的分工是不一樣的,哪個(gè)部門的任務(wù)就由該部門完成,一個(gè)部門完成不成任務(wù)對(duì)其他部門影響不大,甚至沒有影響。三層架構(gòu)設(shè)計(jì)模式如圖2所示。
(1)表示層:它負(fù)責(zé)響應(yīng)用戶的請(qǐng)求,對(duì)于這一層一般代碼量很少。大量的處理工作交給業(yè)務(wù)邏輯層完成。(2)業(yè)務(wù)邏輯層:它負(fù)責(zé)實(shí)現(xiàn)業(yè)務(wù)規(guī)則、數(shù)據(jù)訪問操作及對(duì)數(shù)據(jù)進(jìn)行有效性驗(yàn)證等。(3)數(shù)據(jù)庫層:主要實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ),本例使用SQL Server2005作為存儲(chǔ)數(shù)據(jù)的服務(wù)器。(4)Common層:用來封裝一些常用的功能性代碼,主要用來為其他層服務(wù)的。
1.2 完美體現(xiàn)三層架構(gòu)模式的數(shù)據(jù)源控件——ObjectDataSource。大多數(shù)ASP.NET數(shù)據(jù)源控件(如AccessDataSource、SqlDataSource等)都是應(yīng)用于兩層架構(gòu)的開發(fā)。但是應(yīng)用程序設(shè)計(jì)的基本原則是將表示層與業(yè)務(wù)邏輯相分離。開發(fā)人員可以利用ObjectDataSource控件將頁面上的數(shù)據(jù)控件與業(yè)務(wù)邏輯層的數(shù)據(jù)訪問類的相關(guān)方法綁定,從而快速實(shí)現(xiàn)表示層與業(yè)務(wù)邏輯層的關(guān)聯(lián)。
ObjectDataSource控件通過反射調(diào)用數(shù)據(jù)訪問類中的方法,實(shí)現(xiàn)對(duì)數(shù)據(jù)執(zhí)行選擇、更新、插入與刪除。實(shí)現(xiàn)步驟如下:首先設(shè)置ObjectDataSource控件的TypeName屬性,將數(shù)據(jù)訪問類與ObjectDataSource控件建立關(guān)聯(lián),然后設(shè)置ObjectDataSource控件的SelectMethod、UpdateMethod屬性,將這些屬性與數(shù)據(jù)訪問類中的相關(guān)方法建立關(guān)聯(lián)。ObjectDataSource控件的三層應(yīng)用程序結(jié)構(gòu)。
1.3 LING to XML的應(yīng)用。LING to XML是LINQ技術(shù)的一種,它的最大優(yōu)勢(shì)在于和Language-Integrated Quary(LINQ)集成,對(duì)符合XML規(guī)范的文件進(jìn)行查詢,檢索,操作(添加、刪除、修改等),它與傳統(tǒng)操作XML的方法(例如文檔對(duì)象模型DOM)最大的區(qū)別在于它更簡(jiǎn)單、規(guī)范、強(qiáng)大。在本例的業(yè)務(wù)邏輯層的數(shù)據(jù)訪問類中,就使用了LINQ to XML實(shí)現(xiàn)對(duì)留言信息的添加、修改和查詢功能。
2 設(shè)計(jì)過程詳解
2.1 XML留言本——數(shù)據(jù)庫層設(shè)計(jì)。本例采用XML文件存儲(chǔ)留言信息,所以網(wǎng)站根目錄下的LeaveWord.xml文件也是數(shù)據(jù)層的一部分。在LeaveWord.xml文件中,每個(gè)標(biāo)記表示一條留言信息。LeaveWord.xml文件代碼如下:
2.2 XML留言本——業(yè)務(wù)邏輯層設(shè)計(jì)。在網(wǎng)站LeaveWordService類文件中存放的是業(yè)務(wù)邏輯層的數(shù)據(jù)訪問類代碼。在數(shù)據(jù)訪問類中實(shí)現(xiàn)了對(duì)留言信息的添加、刪除、修改和查詢功能。
(1)在XML文件中查詢留言相關(guān)內(nèi)容,應(yīng)用LINQ to XML查詢XML中所有元素,主要是調(diào)用了業(yè)務(wù)邏輯層自定的GetList()方法實(shí)現(xiàn)。在該方法首先調(diào)用Load()方法加載XML文件,然后定義查詢XML中所有元素的LINQ表達(dá)式,接著應(yīng)用foreach遍歷XML中的元素并將元素值賦給實(shí)體,最后返回實(shí)體列表。(2)將留言信息添加到XML文檔中,主要調(diào)用了業(yè)務(wù)邏輯層自定義的Add()方法。在該方法中首先調(diào)用Load()方法加載到XML文件,其次構(gòu)造XElement類型的元素,最后將構(gòu)造的元素添加到XML中并保存XML文件。(3)刪除XML文件中指定的留言信息時(shí),調(diào)用了業(yè)務(wù)邏輯Delete()方法。在該方法中首先使用LINQ表達(dá)式查找要?jiǎng)h除XML元素,其次刪除查找到元素序列中的第一個(gè)元素,最后保存XML文件。(4)在XML留言本詳細(xì)信息中修改XML元素,首先調(diào)用業(yè)務(wù)邏輯層數(shù)據(jù)訪問類中的Get()方法從XML文件中加載要修改的留言信息。用戶修改留言信息后單擊“更新”按鈕時(shí),調(diào)用業(yè)務(wù)邏輯層數(shù)據(jù)訪問類的Update()方法交修改的內(nèi)容更新XML文件中。
2.3 XML留言本——表示層設(shè)計(jì)。上面代碼中使用LINQ to XML實(shí)現(xiàn)了業(yè)務(wù)邏輯層對(duì)數(shù)據(jù)層(數(shù)據(jù)庫)的訪問,那么表示層Web頁面如何訪問業(yè)務(wù)邏輯層呢?我們使用ObjectDataSource控件實(shí)現(xiàn)表示層與業(yè)務(wù)邏輯層的關(guān)聯(lián)。
以刪除XML留言信息為例,在刪除XML留言信息頁面(DeleteLeaveWord.aspx)中添加一個(gè)ObjectDataSource控件,該控件的HTML代碼如下:
DeleteMethod=\"Delete\" SelectMethod=\"GetList\" TypeName=\"LeaveWordService\" DataObjectTypeName=\"LeaveWordDomain\">
上述代碼中,將TypeName屬性值設(shè)為L(zhǎng)eaveWordService,表示與業(yè)務(wù)邏輯層中的數(shù)據(jù)訪問類LeaveWordService關(guān)聯(lián);將DeleteMethod屬性值設(shè)為Delete,表示調(diào)用LeaveWordService類的Delete()方法執(zhí)行ObjectDataSource的刪除操作,將SelectMethod屬性設(shè)為GetList,表示調(diào)用LeaveWordService類的GetList()方法執(zhí)ObjectDataSource的查詢操作,查詢返回類型由DataObjectName屬性指定。
3 結(jié)束語
采用三層架構(gòu)開發(fā)項(xiàng)目結(jié)構(gòu)清晰,安全性高,同時(shí)增加了代碼的可重用性和可擴(kuò)展性,有利于實(shí)現(xiàn)人員分工合作。
參考文獻(xiàn):
[1]尹安.基于MVC和XML的異構(gòu)數(shù)據(jù)庫集成系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D].華中科技大學(xué),2006.
[2]徐楓.ASP.NET三層架構(gòu)體系分析與應(yīng)用[J].數(shù)字技術(shù)與應(yīng)用,2011(08).
[3]戰(zhàn)非.NET平臺(tái)下基于LINQ三層架構(gòu)的實(shí)現(xiàn)[J].電腦知識(shí)與技術(shù),2010(11).
作者單位:常州劉國(guó)鈞高等職業(yè)技術(shù)學(xué)校,江蘇常州 213025