周芹
摘 要: 在目前的軟件體系結(jié)構(gòu)中,三層體系結(jié)構(gòu)作為一種新的開發(fā)模式被廣泛應(yīng)用,特別是應(yīng)用在.NET開發(fā)中。文章分析了傳統(tǒng)三層體系結(jié)構(gòu)的優(yōu)缺點(diǎn),給出了一種基于.NET技術(shù)的四層體系結(jié)構(gòu)Web應(yīng)用的設(shè)計(jì)方法,并用實(shí)例說明了如何構(gòu)建四層體系結(jié)構(gòu)進(jìn)行Web應(yīng)用系統(tǒng)開發(fā)。四層體系結(jié)構(gòu)的應(yīng)用大大提高了開發(fā)效率和代碼的重復(fù)利用率。
關(guān)鍵詞: 三層結(jié)構(gòu); .NET; 效率; 代碼重復(fù)利用率
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):1006-8228(2013)06-16-02
Study on the development mode based on .NET
Zhou Qin
(Department of Computer Engineering, Dongguan polytechnic College, Dongguan, Guangdong 523808, China)
Abstract: In the current software system structure, three-tier system structure, as a new development model, has been widely applied. Some merits and faults in traditional three-tier architecture are discussed. A design method of four-tier architecture in Web application is given, based on .NET. It is illustrated how to build Web application system using such technology. Meanwhile, an example is given to explain how to use four-tier system structure for Web application system. Application of four layer system structure has greatly improved the developing efficiency and code reusing rate.
Key words: Three-tier architecture; .NET; efficiency; reuse rate
1 B/S三層結(jié)構(gòu)和其優(yōu)缺點(diǎn)
Web體系結(jié)構(gòu)的發(fā)展經(jīng)歷了兩層體系結(jié)構(gòu)和三層體系結(jié)構(gòu)階段。目前,流行的三層Web體系結(jié)構(gòu)主要有基于OMG的CORBA、基于微軟的COM+和基于SUN公司的RMI的分布式三層Web體系結(jié)構(gòu)。三層體系結(jié)構(gòu)將應(yīng)用程序分成三個(gè)不同的邏輯層次:表示層,應(yīng)用邏輯層和數(shù)據(jù)層[1-2]。
⑴ 表示層
在表示層中,.NET是由ASP.NET Web Forms來實(shí)現(xiàn)的。Web Forms是CLR的程序模型?;诜?wù)器端的動(dòng)態(tài)頁(yè)面技術(shù),可以在服務(wù)器端根據(jù)客戶端請(qǐng)求和提交的信息,動(dòng)態(tài)地生成與客戶端瀏覽器類型無關(guān)的通用HTML頁(yè)面,也可以根據(jù)客戶端瀏覽器類型,生成特定的數(shù)據(jù)表現(xiàn)形式。
⑵ 應(yīng)用邏輯層
在.NET中,應(yīng)用邏輯層根據(jù)業(yè)務(wù)邏輯對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行查詢、增加、刪除、修改操作。主要利用.Net Framework中的SqlConnection對(duì)象、SqlDataAdapter對(duì)象、DataSet對(duì)象、SqlCommand對(duì)象進(jìn)行業(yè)務(wù)類的封裝。
⑶ 數(shù)據(jù)層
數(shù)據(jù)層是數(shù)據(jù)庫(kù)或者數(shù)據(jù)源。在.NET中,通常它是一個(gè)SQL Server或Access數(shù)據(jù)庫(kù),但不僅限于此兩種形式,它還可能是Oracle,mySQL,甚至是XML[3-4]。
.NET中的B/S三層結(jié)構(gòu)如圖1所示。
[用戶][服
務(wù)
器
端
(S)][客戶端(B)][表示層][應(yīng)用邏輯層][業(yè)務(wù)邏輯類][界面][數(shù)據(jù)庫(kù)] [數(shù)據(jù)層]
圖1 B/S三層結(jié)構(gòu)
三層體系結(jié)構(gòu)將軟件開發(fā)分層,將數(shù)據(jù)庫(kù)設(shè)計(jì)和業(yè)務(wù)邏輯分開來,將界面設(shè)計(jì)和代碼編寫分開來。簡(jiǎn)單來說可以將人員按工作分為界面設(shè)計(jì)人員、業(yè)務(wù)實(shí)現(xiàn)人員、數(shù)據(jù)庫(kù)設(shè)計(jì)人員。很顯然,一個(gè)團(tuán)隊(duì)采用多層開發(fā)就可以合理地分配人員工作,將每個(gè)人放置到適合的崗位上,而主要的技術(shù)人員重點(diǎn)關(guān)注在關(guān)鍵部位的開發(fā)工作。
但是采用三層體系結(jié)構(gòu)開發(fā)的應(yīng)用程序,相應(yīng)的代碼都是和開發(fā)實(shí)例相關(guān)的,代碼的可移植性和重用性降低,代碼無法重用,開發(fā)人員再重新開發(fā)另外一個(gè)應(yīng)用實(shí)例時(shí),又需要重新根據(jù)新的實(shí)例進(jìn)行三層開發(fā)。
2 四層體系結(jié)構(gòu)模型以及開發(fā)實(shí)例
為了提高程序的利用率和重用性,給開發(fā)人員更好地分工。在三層結(jié)構(gòu)的基礎(chǔ)上,把應(yīng)用邏輯層劃分成兩層:業(yè)務(wù)邏輯層和數(shù)據(jù)訪問層。其中數(shù)據(jù)訪問層與具體的開發(fā)實(shí)例無關(guān),可以把開發(fā)人員劃分為:
⑴ 界面設(shè)計(jì)人員:設(shè)計(jì)程序界面然后將信息提交給業(yè)務(wù)層,不需要考慮業(yè)務(wù)層的邏輯關(guān)系;
⑵ 業(yè)務(wù)實(shí)現(xiàn)人員:工作是處理界面提交的數(shù)據(jù)請(qǐng)求完成邏輯流程,再結(jié)合數(shù)據(jù)訪問層,不用考慮界面設(shè)計(jì)的樣式、風(fēng)格,也不用考慮數(shù)據(jù)庫(kù)的格式;
⑶ 數(shù)據(jù)訪問層:一般是設(shè)計(jì)完善的架構(gòu)系統(tǒng),基本不需要人員工作,主要是屏蔽掉數(shù)據(jù)庫(kù)間的差異,為業(yè)務(wù)層提供便捷的操作功能;
⑷ 數(shù)據(jù)庫(kù)設(shè)計(jì)人員:負(fù)責(zé)設(shè)計(jì)、規(guī)劃數(shù)據(jù)庫(kù)。
我們用一個(gè)企業(yè)新聞發(fā)布系統(tǒng)中的后臺(tái)管理部分,來說明利用.NET實(shí)現(xiàn)四層結(jié)構(gòu)的Web應(yīng)用。主要功能是管理員登錄進(jìn)后臺(tái)后可以進(jìn)行新聞信息的編輯,管理員能夠進(jìn)行用戶的管理。
本實(shí)例四層體系結(jié)構(gòu)模型以及人員分工如圖2所示。
圖2 四層體系結(jié)構(gòu)模型以及人員分工
2.1 數(shù)據(jù)層
企業(yè)新聞發(fā)布的后臺(tái)部分主要完成新聞信息的管理和后臺(tái)登錄用戶的管理。因此數(shù)據(jù)庫(kù)設(shè)計(jì)人員需要?jiǎng)?chuàng)建數(shù)據(jù)庫(kù),需創(chuàng)建的主要表結(jié)構(gòu)有用戶表(TB_USER)和新聞信息表(TB_NEWS)。
2.2 數(shù)據(jù)訪問層
該層在實(shí)際的開發(fā)中基本不需要人員工作,因?yàn)樵搶拥拈_發(fā)與具體的應(yīng)用實(shí)例無關(guān),代碼可以一次編寫多次使用。該層的開發(fā)無需關(guān)注數(shù)據(jù)庫(kù)的結(jié)構(gòu)和具體的業(yè)務(wù)邏輯,主要是使用.Net Framework中的SqlConnection對(duì)象、SqlDataAdapter對(duì)象、DataSet對(duì)象、SqlCommand對(duì)象進(jìn)行數(shù)據(jù)庫(kù)訪問類(DB_Help)的封裝,DB_Help類直接對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作,對(duì)應(yīng)本實(shí)例只需完成三個(gè)函數(shù):構(gòu)造函數(shù)DB_Help()用來初始化數(shù)據(jù)庫(kù)連接對(duì)象;查詢函數(shù)用來執(zhí)行查詢操作;還有一個(gè)函數(shù)用來執(zhí)行增加、刪除、修改操作。
public DB_Help() //構(gòu)造函數(shù)
{ conn=new SqlConnection(“讀取web.config里面的數(shù)據(jù)庫(kù)
連接語(yǔ)句”);
}
public DataSet GetDatasetBySQL(string strSQL) //查詢函數(shù)
public int ExecuteNonQuery(string strSQL)
//執(zhí)行增加、刪除、修改函數(shù)
從中可以看出,該層是針對(duì)特定數(shù)據(jù)庫(kù)管理系統(tǒng)進(jìn)行數(shù)據(jù)的操作,與具體數(shù)據(jù)無關(guān),所以可以重復(fù)使用。
2.3 表示層的開發(fā)
表示層的開發(fā)主要是由界面設(shè)計(jì)人員負(fù)責(zé),根據(jù)需求分析進(jìn)行界面設(shè)計(jì),在.NET中主要使用HTML控件和ASP.NET服務(wù)器控件,為了把頁(yè)面結(jié)構(gòu)和表現(xiàn)形式分開,一般采用CSS樣式進(jìn)行控件的外觀設(shè)計(jì),因此可以寫一個(gè)通用控件的樣式文件comm.css,當(dāng)需要使用該樣式時(shí),只需在頁(yè)面中通過link命令把樣式文件引入。該樣式文件也可以用在其他的應(yīng)用系統(tǒng)的開發(fā)中。
從這里可以看出,頁(yè)面上沒有出現(xiàn)與數(shù)據(jù)庫(kù)訪問相關(guān)的代碼,表示層的開發(fā)無需關(guān)注數(shù)據(jù)庫(kù)的結(jié)構(gòu)和業(yè)務(wù)邏輯層的開發(fā)。
2.4 業(yè)務(wù)邏輯層的開發(fā)
業(yè)務(wù)邏輯層主要完成與需求相關(guān)的數(shù)據(jù)訪問類的封裝,本實(shí)例中創(chuàng)建BLL命名空間,主要包含以下幾個(gè)類。
⑴ User類:根據(jù)數(shù)據(jù)庫(kù)表TB_USER來創(chuàng)建,該類的數(shù)據(jù)成員為表TB_USER的字段,成員函數(shù)為查詢用戶函數(shù)、刪除用戶函數(shù)、修改用戶函數(shù)、添加用戶函數(shù),其中數(shù)據(jù)庫(kù)的執(zhí)行均調(diào)用數(shù)據(jù)訪問層中的函數(shù)來完成。
⑵ News類:根據(jù)數(shù)據(jù)庫(kù)表TB_NEWS來創(chuàng)建,該類的數(shù)據(jù)成員為表TB_NEWS的字段,成員函數(shù)為查詢新聞函數(shù)、刪除新聞函數(shù)、修改新聞函數(shù)、添加新聞函數(shù),其中數(shù)據(jù)庫(kù)的執(zhí)行均調(diào)用數(shù)據(jù)訪問層中的函數(shù)來完成。
⑶ Error類:對(duì)可能出現(xiàn)的異常信息進(jìn)行報(bào)錯(cuò)提示。
業(yè)務(wù)邏輯層除了完成這些類的封裝之外,還要編寫和表示層相關(guān)聯(lián)的程序代碼,也就是為表示層中的控件添加響應(yīng)事件,在響應(yīng)事件中調(diào)用業(yè)務(wù)邏輯層類中的相關(guān)函數(shù)來完成操作,并把操作結(jié)果顯示給用戶。
3 結(jié)束語(yǔ)
Web應(yīng)用是當(dāng)今分布式應(yīng)用最廣泛的應(yīng)用形式。三層體系結(jié)構(gòu)被開發(fā)者廣泛使用,三層結(jié)構(gòu)對(duì)系統(tǒng)進(jìn)行了分層開發(fā),使人員分工合理,但是開發(fā)的代碼不能重復(fù)使用。本文提出了基于.NET的四層結(jié)構(gòu)在Web中的應(yīng)用,在三層體系結(jié)構(gòu)中引入了數(shù)據(jù)訪問層,數(shù)據(jù)訪問層可以多次使用,顯著提高了應(yīng)用程序的跨平臺(tái)性和互操作性,增強(qiáng)了程序的重復(fù)利用率。
參考文獻(xiàn):
[1] 胡迎松,彭利文,池楚兵.基于.NET的Web應(yīng)用三層結(jié)構(gòu)設(shè)計(jì)技術(shù)[M].
計(jì)算機(jī)工程,2009.29(8).
[2] 毛德祥,羅榮閣.基于ASP.net技術(shù)的Web應(yīng)用程序三層設(shè)計(jì)模型[M].
開發(fā)應(yīng)用,2002.18(3).
[3] 修乾.基于Web的.NET應(yīng)用系統(tǒng)開發(fā)[M].計(jì)算機(jī)工程,2003.29(21).
[4] 艾迪明..NET框架體系結(jié)構(gòu)[M].計(jì)算機(jī)工程與應(yīng)用,2003.