關(guān)鍵詞 .NET;單元測(cè)試;B/S架構(gòu)
引言
.NET 框架是微軟開發(fā)出的新一代開發(fā)平臺(tái)。允許應(yīng)用程序通過 Internet 進(jìn)行通訊和共享數(shù)據(jù),而不管所采用的是哪種操作系統(tǒng)、設(shè)備或編程語言。本文介紹的管理系統(tǒng)是在.NET平臺(tái)下開發(fā)的,以極限編程的開發(fā)思想,采用了面向?qū)ο箝_發(fā)、B/S架構(gòu)、ASP.NET、C#以及自動(dòng)化測(cè)試工具CSUnit。
問題分析
本系統(tǒng)為國(guó)外的某貿(mào)易公司開發(fā),對(duì)公司的采購(gòu)、銷售、庫存等各個(gè)貿(mào)易環(huán)節(jié)進(jìn)行管理。該公司在國(guó)外,它的供應(yīng)商在國(guó)內(nèi),而客戶都是國(guó)外的公司。公司、供應(yīng)商、客戶目前都可以連接Internet,公司內(nèi)部有局域網(wǎng),對(duì)外主要通過ADSL高速連接Internet。
在對(duì)公司的業(yè)務(wù)需求進(jìn)行了仔細(xì)的分析后,我們認(rèn)為整個(gè)系統(tǒng)應(yīng)當(dāng)包含如下的功能:能夠及時(shí)同供應(yīng)商進(jìn)行交流,并對(duì)供應(yīng)商的產(chǎn)品生產(chǎn)進(jìn)度進(jìn)行跟蹤;收到供應(yīng)商發(fā)來的產(chǎn)品后,可以對(duì)這些產(chǎn)品進(jìn)行庫存管理,并隨時(shí)了解產(chǎn)品的庫存狀況;可以及時(shí)同客戶進(jìn)行交流,并對(duì)客戶發(fā)來的訂單狀況進(jìn)行跟蹤;能夠?qū)τ脩暨M(jìn)行權(quán)限控制,提高系統(tǒng)的可控性和安全性;新系統(tǒng)要界面友好、數(shù)據(jù)傳輸速度較快、易用性和擴(kuò)展性強(qiáng),等等。
系統(tǒng)開發(fā)描述
根據(jù)前面的系統(tǒng)需求和功能分析,系統(tǒng)主要分為以下幾個(gè)部分:
?、?基本設(shè)置管理:包括人員管理模塊——用于建立和維護(hù)使用系統(tǒng)的用戶,公司管理模塊——維護(hù)系統(tǒng)涉及到的客戶和供應(yīng)商信息,產(chǎn)品管理——添加、修改、刪除以及查詢產(chǎn)品信息。
?、?供應(yīng)管理系統(tǒng):因?yàn)楣镜墓?yīng)商主要在國(guó)內(nèi),系統(tǒng)采用中文界面,包括對(duì)采購(gòu)訂單的管理模塊,生產(chǎn)進(jìn)度管理模塊,發(fā)貨批次管理模塊,報(bào)表管理模塊以及交流信息管理模塊。
?、?銷售管理系統(tǒng):該子系統(tǒng)負(fù)責(zé)與客戶的交流,包括客戶詢價(jià)管理模塊,客戶訂單管理模塊,生產(chǎn)信息查詢模塊,質(zhì)量信息反饋系統(tǒng)以及報(bào)表管理模塊。
?、?庫存管理系統(tǒng):對(duì)公司的庫存情況進(jìn)行維護(hù),包括庫房基本設(shè)置模塊,庫房產(chǎn)品管理模塊,報(bào)表管理模塊。
系統(tǒng)采用三層的體系結(jié)構(gòu),數(shù)據(jù)庫采用Microsoft SQL Server2000,編程語言為C#以及ASP.NET, Web頁面采用ASP.NET、codebehide代碼,后臺(tái)程序由C#編寫。除Web表示層外,還有Model層、數(shù)據(jù)訪問層DAL、業(yè)務(wù)邏輯層BLL,自動(dòng)化測(cè)試層UT,等等。
DAL負(fù)責(zé)數(shù)據(jù)庫的數(shù)據(jù)存取,BLL通過調(diào)用DAL層的方法來實(shí)現(xiàn)業(yè)務(wù)需求,Web層通過調(diào)用BLL的方法來實(shí)現(xiàn)與用戶的交互,UT層負(fù)責(zé)Model層、DAL層和BLL層的單元測(cè)試,Model提供數(shù)據(jù)實(shí)體類供Web、BLL、DAL調(diào)用,各層之間的關(guān)系如圖1:

圖 1
DAL負(fù)責(zé)與數(shù)據(jù)庫的交互,為了提高維護(hù)性,采用OOP的設(shè)計(jì)思想,只有BLL層可以直接調(diào)用DAL層類中的方法,不可以跨層調(diào)用。數(shù)據(jù)庫的連接字段信息放置在Web.config文件中,例如:要連接SQL SERVER數(shù)據(jù)庫,設(shè)置如下:
<add key=” MSSQLConnString” value=”server=(local); user id=sa; password=pwd;
database=dbEnt”/>
database=dbEnt”/>
對(duì)于DAL,數(shù)據(jù)訪問可能比較頻繁,需要經(jīng)常進(jìn)行數(shù)據(jù)庫的連接以及關(guān)閉操作,因此系統(tǒng)沒有采用ADO.NET,使用DataReader對(duì)象返回?cái)?shù)據(jù)以提高應(yīng)用程序的性能并減少系統(tǒng)開銷。示例如下:
public static SqlDataReader ExecuteReader(string connString, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms)
SqlCommand cmd = new SqlCommand();
SqlConnection conn = new SqlConnection(connString);
try
{
PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
cmd.Parameters.Clear();
return rdr;
}
catch
{
conn.Close();
throw;
}
}
SqlCommand cmd = new SqlCommand();
SqlConnection conn = new SqlConnection(connString);
try
{
PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
cmd.Parameters.Clear();
return rdr;
}
catch
{
conn.Close();
throw;
}
}
BLL層的功能主要包括銷售管理、采購(gòu)管理、庫存管理、基本設(shè)置管理、產(chǎn)品管理、質(zhì)量管理、財(cái)務(wù)管理等方面,由多個(gè)不同的類互相配合實(shí)現(xiàn)復(fù)雜的業(yè)務(wù)邏輯。
UT層負(fù)責(zé)對(duì)BLL、DAL以及Model進(jìn)行單元測(cè)試,按照XP以及TDD的思想,先編寫單元測(cè)試類,后開始類方法的編寫。通過測(cè)試來指導(dǎo)程序代碼的開發(fā),單元測(cè)試的通過就是類方法的完成。UT層的結(jié)構(gòu)類似DAL,BLL等,針對(duì)不同的類建立相應(yīng)的測(cè)試單元類。UT的結(jié)構(gòu)如圖2:
WEB層是直接與用戶交互的層面,通過codebehind代碼,該層直接調(diào)用BLL層的方法來實(shí)現(xiàn)用戶的業(yè)務(wù)需求,并將結(jié)果顯示在Web頁面。因?yàn)楣痉?wù)器在英國(guó)倫敦,但是很多用戶并不在英國(guó),要考慮的問題包括:
?、?安全性 在web.config中對(duì)文件的安全性進(jìn)行設(shè)置,即使用戶登錄系統(tǒng)后,某些網(wǎng)頁必須有特定權(quán)限的用戶可以瀏覽;對(duì)于頁面間的參數(shù)傳遞通過Session進(jìn)行,超級(jí)鏈接后不附加任何參數(shù)。
?、?速度 考慮到部分的用戶上網(wǎng)速度比較慢,帶寬不足,對(duì)于大批量的數(shù)據(jù)顯示盡量采用分頁的方式進(jìn)行。
⑶ 易用性 由于很多的用戶非計(jì)算機(jī)專業(yè)人員,因此要求系統(tǒng)使用方便而快捷,比如:對(duì)有多個(gè)輸入框的數(shù)據(jù)輸入,可以通過回車鍵在不同的輸入框之間跳轉(zhuǎn),方便用戶操作;對(duì)于內(nèi)部管理系統(tǒng),因?yàn)樵瓤蛻粢恢笔褂肁ccess系統(tǒng),要求新的系統(tǒng)具有較高的自學(xué)習(xí)能力,盡量參照原先系統(tǒng)。

圖2 UT的結(jié)構(gòu)圖
結(jié)束語
本系統(tǒng)開發(fā)時(shí)間為12個(gè)月,開發(fā)人員為5人。數(shù)據(jù)庫使用50多個(gè)庫表,開發(fā)工具為Visio Studio 2003,采用開源工具CSUnit作為單元測(cè)試工具。在多層架構(gòu)的開發(fā)模式下,不同的開發(fā)人員負(fù)責(zé)不同的層,可以專注于自己的部分。比如:負(fù)責(zé)Web頁面的人可以專心設(shè)計(jì)界面,負(fù)責(zé)DAL層的人則主要考慮與數(shù)據(jù)庫的交互,至于業(yè)務(wù)需求則由負(fù)責(zé)BLL層的人來進(jìn)行。通過分層模式,大大改善了系統(tǒng)的維護(hù)性,也加快了開發(fā)速度。可以想像,伴隨著微軟.NET戰(zhàn)略的推行,在.NET下多層架構(gòu)的開發(fā)模式將越來越流行。