張偉 王倚天 王嘉冰
摘要:該文介紹了基于三層架構(gòu)模式的網(wǎng)站的設(shè)計(jì)方法和設(shè)計(jì)流程,說(shuō)明了層架構(gòu)的特點(diǎn)和優(yōu)勢(shì),詳細(xì)闡述了各層設(shè)計(jì)的要點(diǎn)和難點(diǎn)。通過(guò)將對(duì)象設(shè)計(jì)思想應(yīng)用到網(wǎng)站設(shè)計(jì)中,網(wǎng)站設(shè)計(jì)模型得以重用。
關(guān)鍵詞:層;對(duì)象;架構(gòu);LINQ
中圖分類號(hào):TP393文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2012)20-4912-03
Design and Study of Website Based on Three Layer Architecture
ZHANG Wei,WANG Yi-tian,WANG Jia-bing
(Shenyang University of Chemical Technology, Shenyang 110142, China)
Abstract: This paper introduces how to design website based on three layer architecture, illuminates feature and advantage of layer archi tecture,demonstrates main points and difficulties of every layer design in detail.Website design model can be reused by applicating object de sign concept to website design.
Key words: layer; object; architecture; LINQ
架構(gòu)是指將應(yīng)用系統(tǒng)的每個(gè)功能部分分解到獨(dú)立的組件中,并將各種組件劃分到各個(gè)邏輯層中去[1]。
層架構(gòu)是一種弱耦合結(jié)構(gòu),層和層之間是向下依賴的,底層對(duì)于上層是毫無(wú)所知的,上層的修改不會(huì)影響到對(duì)底層的調(diào)用。
所謂三層體系結(jié)構(gòu),是在客戶端與數(shù)據(jù)庫(kù)之間加入了一個(gè)"中間層",也叫組件層。不是簡(jiǎn)單地放置三臺(tái)機(jī)器就是三層體系結(jié)構(gòu),也不僅僅有B/S應(yīng)用才是三層體系結(jié)構(gòu),三層是指邏輯上的三層,即這三個(gè)層放置到一臺(tái)機(jī)器上[2]。
傳統(tǒng)兩層架構(gòu)網(wǎng)站設(shè)計(jì)是通常將用戶的界面顯示與數(shù)據(jù)庫(kù)邏輯(SQL語(yǔ)句)都集中到用戶頁(yè)面中,用戶界面直接與數(shù)據(jù)庫(kù)連接。缺陷就是用戶界面中包含數(shù)據(jù)庫(kù)的查詢或更新語(yǔ)句。三層架構(gòu)是將用戶界面與數(shù)據(jù)的邏輯完全分開在不同的層面中,用戶界面不是直接與數(shù)據(jù)庫(kù)連接的,而是與業(yè)務(wù)邏輯層連接,業(yè)務(wù)邏輯層再與數(shù)據(jù)訪問(wèn)層連接,這樣就實(shí)現(xiàn)了用戶界面與SQL語(yǔ)句的分離,便于系統(tǒng)的擴(kuò)展。當(dāng)系統(tǒng)數(shù)據(jù)庫(kù)更換時(shí),只需修改數(shù)據(jù)訪問(wèn)層即可,前臺(tái)顯示相關(guān)頁(yè)面不需要任何修改,從而方便網(wǎng)站的維護(hù)和修改[3]。
該文所做的工作是基金項(xiàng)目“網(wǎng)絡(luò)環(huán)境下高校圖書館特色資源庫(kù)的建設(shè)與研究”的一部分,特色資源是科研期刊論文和科研著作資源。網(wǎng)絡(luò)環(huán)境下高校圖書館特色資源庫(kù)是以三層架構(gòu)網(wǎng)站為技術(shù)核心建設(shè)的,即數(shù)據(jù)訪問(wèn)層、業(yè)務(wù)邏輯層和界面表示層,在特色資源庫(kù)平臺(tái)上表現(xiàn)為特色資源的結(jié)果顯示、邏輯查詢和調(diào)用以及數(shù)據(jù)訪問(wèn),具體關(guān)系圖如下圖所示。
1三層架構(gòu)設(shè)計(jì)
按三層架構(gòu)模式設(shè)計(jì)網(wǎng)站是目前網(wǎng)站設(shè)計(jì)的普遍方法,三層即數(shù)據(jù)訪問(wèn)層、業(yè)務(wù)邏輯層和界面表示層,數(shù)據(jù)訪問(wèn)層是對(duì)數(shù)據(jù)請(qǐng)求進(jìn)行響應(yīng),執(zhí)行sql語(yǔ)句,返回?cái)?shù)據(jù)記錄或數(shù)據(jù)表;業(yè)務(wù)邏輯層是擬要設(shè)計(jì)的網(wǎng)站所涉及的業(yè)務(wù)領(lǐng)域,該領(lǐng)域的業(yè)務(wù)邏輯操作以計(jì)算機(jī)程序或算法的方式實(shí)現(xiàn);界面表示層是直接面向用戶的,向用戶展現(xiàn)網(wǎng)站的功能和布局及其美感。
特色資源庫(kù)平臺(tái)網(wǎng)站按三層架構(gòu)設(shè)計(jì),特色資源庫(kù)是學(xué)校老師科研論文和著作的資源總庫(kù),對(duì)數(shù)據(jù)訪問(wèn)層的數(shù)據(jù)請(qǐng)求基本是查詢和搜索,即按作者、篇名和關(guān)鍵詞等查詢;業(yè)務(wù)邏輯層是查詢條件的邏輯操作,即高級(jí)檢索按多個(gè)限定條件檢索;界面表示層是對(duì)查詢結(jié)果排列顯示及論文或著作的摘要簡(jiǎn)介等。
數(shù)據(jù)庫(kù)是三層架構(gòu)之外的最底層,它是按照某種數(shù)據(jù)模型組織數(shù)據(jù)并存放于存儲(chǔ)器中的具有一定聯(lián)系的數(shù)據(jù)集合。將所有數(shù)據(jù)集中存放在數(shù)據(jù)庫(kù)中,不但便于對(duì)其進(jìn)行統(tǒng)一管理(如增加、刪除、修改和檢索數(shù)據(jù)等),而且便于提煉出對(duì)決策更有用的數(shù)據(jù)和信息[4]。
數(shù)據(jù)庫(kù)可以是微軟的SQL Server或者ORACLE,以SQL Server數(shù)據(jù)庫(kù)為例,目前SQL Server最新版本是2008,但是運(yùn)行穩(wěn)定且廣泛應(yīng)用的是SQL Server 2005版本,該版本擴(kuò)展了SQL Server 2000的性能、可靠性、可用性、可編程性和易用性。SQL Server2005包含了多項(xiàng)新功能,尤其在安全性方面有著較高要求,對(duì)某些操作權(quán)限有嚴(yán)格限制。它成為大規(guī)模聯(lián)機(jī)事務(wù)處理(OLTP)、數(shù)據(jù)倉(cāng)庫(kù)的電子商務(wù)應(yīng)用程序的優(yōu)秀數(shù)據(jù)庫(kù)平臺(tái)。
1.1數(shù)據(jù)訪問(wèn)層
數(shù)據(jù)訪問(wèn)層是對(duì)最底層數(shù)據(jù)庫(kù)操作,對(duì)數(shù)據(jù)庫(kù)進(jìn)行增加、刪除、修改、查找記錄等操作。數(shù)據(jù)訪問(wèn)層執(zhí)行增加、刪除、修改、查找等sql語(yǔ)句,sql語(yǔ)句中的參數(shù)是從業(yè)務(wù)邏輯層中傳來(lái)的,該參數(shù)是以對(duì)象的方式傳遞的,即在用戶界面層獲得一系列數(shù)據(jù),把這些數(shù)據(jù)以對(duì)象屬性的方式進(jìn)行封裝,然后僅將對(duì)象傳遞給業(yè)務(wù)邏輯層即可,業(yè)務(wù)邏輯層將對(duì)象的屬性進(jìn)行業(yè)務(wù)操作,最后將對(duì)象傳遞給數(shù)據(jù)訪問(wèn)層。數(shù)據(jù)訪問(wèn)層將對(duì)象的各個(gè)屬性作為sql參數(shù)參與執(zhí)行。該層將執(zhí)行結(jié)果返回給業(yè)務(wù)邏輯層,執(zhí)行結(jié)果是某條或多條數(shù)據(jù)記錄或者一個(gè)或多個(gè)數(shù)據(jù)表。
特色資源庫(kù)平臺(tái)的數(shù)據(jù)訪問(wèn)層包括科研論文、科研著作等數(shù)據(jù)庫(kù)表對(duì)應(yīng)的類及連接數(shù)據(jù)庫(kù)的類,全文采用文件上傳方式傳到文件夾中,數(shù)據(jù)庫(kù)里放該全文的相對(duì)鏈接地址。
數(shù)據(jù)訪問(wèn)層的兩種設(shè)計(jì)方法:
1.1.1普通設(shè)計(jì)
設(shè)計(jì)一個(gè)DBHelper類,該類中包含建立數(shù)據(jù)庫(kù)連接、執(zhí)行sql語(yǔ)句等。數(shù)據(jù)庫(kù)中的每個(gè)表對(duì)應(yīng)一個(gè)數(shù)據(jù)服務(wù)類,該類中包含對(duì)表中數(shù)據(jù)的一系列操作,操作結(jié)果對(duì)應(yīng)對(duì)象實(shí)例列表,每條數(shù)據(jù)對(duì)應(yīng)一個(gè)對(duì)象實(shí)例。
1.1.2 LINQ設(shè)計(jì)
LINQ是Language Integrated Query的縮寫,中文名字是語(yǔ)言集成查詢,它提供給程序員一個(gè)統(tǒng)一的編程概念和語(yǔ)法,程序員不需要關(guān)心將要訪問(wèn)的是關(guān)系數(shù)據(jù)庫(kù)、XML數(shù)據(jù)或是遠(yuǎn)程的對(duì)象,它都采用同樣的訪問(wèn)方式[5]。每一種數(shù)據(jù)對(duì)象都有一種查詢語(yǔ)言,程序員無(wú)需知道每一種查詢語(yǔ)言,統(tǒng)一使用LINQ技術(shù)就可以一步到位。LINQ架構(gòu)如下圖1所示。
圖1 LINQ架構(gòu)圖[6]
存儲(chǔ)過(guò)程是一組為了完成特定功能的SQL語(yǔ)句集,經(jīng)編譯后存儲(chǔ)在數(shù)據(jù)庫(kù)中。Linq到SQL在對(duì)象模型中使用方法來(lái)表示數(shù)據(jù)庫(kù)中的存儲(chǔ)過(guò)程,可以通過(guò)應(yīng)用FunctionAttribute屬性和ParameterAttribute屬性(如果需要)將方法指定為存儲(chǔ)過(guò)程[7]。
使用VisualStudio2008的對(duì)象關(guān)系設(shè)計(jì)器可以很容易地把存儲(chǔ)過(guò)程映射為對(duì)象模型中的方法??梢灾苯影汛鎯?chǔ)過(guò)程拖放到方法窗口,這樣就能生成與該存儲(chǔ)過(guò)程對(duì)應(yīng)的方法,例如把存儲(chǔ)過(guò)程SPAddCA拖放到設(shè)計(jì)器最右邊的方法窗格中就會(huì)直接生成與該存儲(chǔ)過(guò)程對(duì)應(yīng)的方法SPAddCA。
1.2業(yè)務(wù)邏輯層
業(yè)務(wù)邏輯層處于界面表示層和數(shù)據(jù)訪問(wèn)層中間,它不僅啟到中轉(zhuǎn)表示層數(shù)據(jù)到數(shù)據(jù)訪問(wèn)層的作用,而且還可以對(duì)表示層輸入的數(shù)據(jù)進(jìn)行處理和有效驗(yàn)證、對(duì)多個(gè)表的事務(wù)處理等,它既是調(diào)用者又是被調(diào)用者,和界面表示層和數(shù)據(jù)訪問(wèn)層是依賴和被依賴的關(guān)系。業(yè)務(wù)邏輯層決不是可有可無(wú)的中間層,隨著項(xiàng)目業(yè)務(wù)邏輯越來(lái)越復(fù)雜,就會(huì)漸漸的感覺(jué)到業(yè)務(wù)邏輯層所啟到的作用。對(duì)于事務(wù)處理在SQL Server數(shù)據(jù)庫(kù)中可以寫到存儲(chǔ)過(guò)程里,然而在ORACLE數(shù)據(jù)庫(kù)中就必須寫到業(yè)務(wù)邏輯層中,如果不使用業(yè)務(wù)邏輯層來(lái)處理,而放在數(shù)據(jù)訪問(wèn)層來(lái)處理,業(yè)務(wù)邏輯和數(shù)據(jù)訪問(wèn)邏輯混在一起,代碼就會(huì)很混亂,給后期維護(hù)帶來(lái)諸多麻煩。
業(yè)務(wù)領(lǐng)域?qū)<遥骋粯I(yè)務(wù)領(lǐng)域與計(jì)算機(jī)結(jié)合必將形成更大的價(jià)值結(jié)構(gòu)。業(yè)務(wù)邏輯層到底都包括什么?對(duì)于用戶界面層某些數(shù)據(jù)請(qǐng)求不能立即通過(guò)業(yè)務(wù)邏輯層傳給數(shù)據(jù)訪問(wèn)層處理,需要業(yè)務(wù)邏輯層做相應(yīng)的處理,以PetShop為例,業(yè)務(wù)邏輯層中有購(gòu)物車等業(yè)務(wù)邏輯,它就是將客戶訂購(gòu)的商品逐一統(tǒng)計(jì)存入購(gòu)物車,當(dāng)然如果中途改變主意不想訂購(gòu)某個(gè)商品,也可以將某個(gè)商品從購(gòu)物車中移除,最終將購(gòu)物車中數(shù)據(jù)送給數(shù)據(jù)訪問(wèn)層存儲(chǔ)在數(shù)據(jù)庫(kù)中。業(yè)務(wù)邏輯即是和某一專業(yè)相關(guān)的數(shù)據(jù)處理,并且該數(shù)據(jù)處理遵循本專業(yè)業(yè)務(wù)規(guī)則。業(yè)務(wù)邏輯層設(shè)計(jì)需要有業(yè)務(wù)領(lǐng)域?qū)<覅⑴c,設(shè)計(jì)業(yè)務(wù)流程。
業(yè)務(wù)邏輯層設(shè)計(jì)就是將涉及業(yè)務(wù)邏輯操作的類抽象出來(lái),按照面向?qū)ο蟮脑O(shè)計(jì)方法對(duì)類進(jìn)行詳細(xì)設(shè)計(jì),界面表示層和數(shù)據(jù)訪問(wèn)層通過(guò)業(yè)務(wù)邏輯層中的對(duì)象的方法和屬性得到數(shù)據(jù)傳遞和信息交互。
特色資源庫(kù)的業(yè)務(wù)邏輯包括科研論文和著作的查詢,高級(jí)搜索等。
1.3界面表示層
表示層是一個(gè)網(wǎng)站系統(tǒng)的“門面”,無(wú)論網(wǎng)站系統(tǒng)功能設(shè)計(jì)的多么強(qiáng)大和完善,代碼多么簡(jiǎn)潔漂亮,系統(tǒng)的可擴(kuò)展性多么高,但是最終面向用戶的大多是表示層的東西。表示層主要注重的是美觀和易用,美觀即外觀設(shè)計(jì)漂亮,能給人美的感覺(jué);易用即具有良好的用戶體驗(yàn),用戶用起來(lái)舒服、順手。
表示層是面向用戶的,對(duì)數(shù)據(jù)進(jìn)行排列表示,對(duì)數(shù)據(jù)進(jìn)行合法驗(yàn)證,對(duì)數(shù)據(jù)在跨頁(yè)面間存儲(chǔ)和傳輸,對(duì)用戶登錄驗(yàn)證和存儲(chǔ)。界面表示層是為用戶提供用于交互的應(yīng)用服務(wù)圖形界面,幫助用戶理解和高效地定位應(yīng)用服務(wù),接受用戶的輸入并呈現(xiàn)業(yè)務(wù)邏輯層中傳遞的數(shù)據(jù)。表示層對(duì)數(shù)據(jù)進(jìn)行排列布局,給用戶提供優(yōu)美的外觀和良好的服務(wù),使用戶方便快捷地利用應(yīng)用服務(wù)和查詢信息。
界面表示層設(shè)計(jì)遵循結(jié)構(gòu)和外觀分離的原則,即頁(yè)面文件只包含結(jié)構(gòu)信息,例如頁(yè)面控件布局、位置等;而所有與外觀相關(guān)的信息存儲(chǔ)在CSS文件中,例如字體、顏色、邊框等。這樣就保證了頁(yè)面的結(jié)構(gòu)不會(huì)錯(cuò)位,外觀顯示不會(huì)混亂。DIV+CSS布局方法是目前一種比較方便和實(shí)用的網(wǎng)頁(yè)布局方法,它使用div標(biāo)簽作為容器,使用CSS技術(shù)排布div標(biāo)簽,使用這種方法能高效快捷地設(shè)計(jì)各種網(wǎng)頁(yè)[8]。
特色資源庫(kù)網(wǎng)站平臺(tái)界面通過(guò)設(shè)計(jì)母版頁(yè)來(lái)簡(jiǎn)化網(wǎng)站界面設(shè)計(jì)工作,根據(jù)網(wǎng)頁(yè)首部和底部在網(wǎng)站頁(yè)面中內(nèi)容一致的設(shè)計(jì)原則,故將首部和底部設(shè)計(jì)為母版頁(yè),以方便重用。后臺(tái)管理頁(yè)也可以采用同樣的方法將導(dǎo)航等信息設(shè)計(jì)為母版頁(yè)。
2優(yōu)點(diǎn)
三層架構(gòu)模式網(wǎng)站設(shè)計(jì)方法是將面向?qū)ο笏枷霊?yīng)用到網(wǎng)站設(shè)計(jì)中,在數(shù)據(jù)訪問(wèn)層中按照數(shù)據(jù)表建立數(shù)據(jù)服務(wù)類,將對(duì)某一數(shù)據(jù)表的各種操作放到該數(shù)據(jù)表對(duì)應(yīng)的數(shù)據(jù)服務(wù)類中,業(yè)務(wù)邏輯層中的類是和數(shù)據(jù)訪問(wèn)層中的類一一對(duì)應(yīng)的,只不過(guò)業(yè)務(wù)邏輯層不僅僅是對(duì)底層數(shù)據(jù)的調(diào)用,而且還是對(duì)上層數(shù)據(jù)的邏輯加工。界面表示層中每一個(gè)頁(yè)面對(duì)應(yīng)一個(gè)類,該類按照數(shù)據(jù)需求對(duì)業(yè)務(wù)邏輯層中的對(duì)象進(jìn)行調(diào)用,該類中html表示信息和程序代碼分離。
參考文獻(xiàn):
[1]孫繼紅.基于.NET三層架構(gòu)的網(wǎng)上商城設(shè)計(jì)與實(shí)現(xiàn)[J].網(wǎng)絡(luò)與通信,2008(9):96-98
[2]吳澤. .Net的三層結(jié)構(gòu)[J].消費(fèi)導(dǎo)刊,2007(2):123
[3]龔赤兵.Web開發(fā)新體驗(yàn):ASP.NET3.5MVC架構(gòu)與實(shí)戰(zhàn)[M].北京:電子工業(yè)出版社,2009:378
[4]王國(guó)勝,柴寶杰,尼春雨.ASP.NET+SQL Server動(dòng)態(tài)網(wǎng)站開發(fā)[M].北京:清華大學(xué)出版社,2009:72
[5]趙曉東,張正禮,許小榮.ASP.NET3.5從入門到精通[M].北京:清華大學(xué)出版社,2009:346
[6]李小航. ASP.NET程序設(shè)計(jì)中LINQ技術(shù)的應(yīng)用研究[J].科技廣場(chǎng),2010(8): 33-35
[7]趙曉東,張正禮,許小榮.ASP.NET3.5從入門到精通[M].北京:清華大學(xué)出版社,2009:363
[8]曾靜娜.新手學(xué)CSS+DIV[M].北京:北京希望電子出版社,2010:196.