摘 要: 通過對(duì)基于.NET的B/S管理系統(tǒng)一般項(xiàng)目的分析,給出了一個(gè)基于.NET的原型系統(tǒng)的設(shè)計(jì)過程。分析了該原型系統(tǒng)的數(shù)據(jù)庫(kù)設(shè)計(jì)、數(shù)據(jù)層、業(yè)務(wù)邏輯和Web頁面設(shè)計(jì)。以蘇州大學(xué)應(yīng)用技術(shù)學(xué)院項(xiàng)目實(shí)驗(yàn)教學(xué)為例,探討了采用基于該原型系統(tǒng)的實(shí)驗(yàn)方法和步驟。
關(guān)鍵詞: 原型系統(tǒng); 實(shí)驗(yàn)實(shí)訓(xùn); .NET; 管理系統(tǒng)
中圖分類號(hào):TP393.07 文獻(xiàn)標(biāo)志碼:B 文章編號(hào):1006-8228(2013)04-60-03
Discussion on .NET development experiment based on projects
He Jun
(School of Computer Science Technology, Computing Center, Soochow University, Suzhou, Jiangsu 215006, China)
Abstract: Through analysis of .NET B/S management system, a design process which based on .NET prototype system is presented. The prototype system is analyzed by the database design, data layer, the design of business logic and web page. Taking the experimental teaching of Applied Technology College of Soochow University as example, the method and procedure of experiment for this prototype system are discussed in this paper.
Key words: prototype system; training teaching; .Net; management system
1 基于.NET 的B/S管理系統(tǒng)項(xiàng)目分析
基于.NET B/S信息管理系統(tǒng)大多是基于數(shù)據(jù)庫(kù)的管理系統(tǒng),該類系統(tǒng)的開發(fā)都有統(tǒng)一的套路:開發(fā)語言選擇VB或C#,后臺(tái)數(shù)據(jù)庫(kù)選擇Sql Server或Access等;體系結(jié)構(gòu)通常為三層架構(gòu)[1~2]:表示層、應(yīng)用邏輯層(即中間層)、數(shù)據(jù)層[3];從開發(fā)者的角度看,表示層對(duì)應(yīng)Web頁面或用戶控件的集合,數(shù)據(jù)層提供直接操作數(shù)據(jù)庫(kù)的全體對(duì)象集合,而應(yīng)用邏輯層提供表示層和數(shù)據(jù)層之間的訪問接口,該層起到承上啟下的作用,采用類庫(kù)方式向上提供訪問接口,向下包裝數(shù)據(jù)層接口。基于.NET的B/S管理系統(tǒng)的通用體系結(jié)構(gòu)如圖1所示。
三層體系結(jié)構(gòu)是:表示層、應(yīng)用邏輯層、數(shù)據(jù)層。在表示層,將各個(gè)功能頁面劃分成許多自定義用戶控件或服務(wù)器控件,將控件搭建成完整的功能頁面,并將數(shù)據(jù)安全訪問和功能操作、設(shè)置等驗(yàn)證放在控件中,使用模塊表進(jìn)行管理,其目的是便于裝配和安全控制。數(shù)據(jù)訪問及業(yè)務(wù)邏輯層主要采用微軟提供的標(biāo)準(zhǔn)數(shù)據(jù)應(yīng)用訪問塊Application Blocks for .NET。該類庫(kù)集成數(shù)據(jù)庫(kù)的連接、方法重載返回DataSet和DataReader訪問數(shù)據(jù)庫(kù)、采用Execute或ExecuteScalar等方法重載更新和修改數(shù)據(jù)庫(kù),以及ExecuteXmlReade方法處理XML文檔的輸入輸出。在本原型系統(tǒng)中擴(kuò)充了標(biāo)準(zhǔn)數(shù)據(jù)應(yīng)用訪問塊的功能,使其能夠提供滿足數(shù)據(jù)訪問的要求和部分業(yè)務(wù)邏輯的實(shí)現(xiàn)。
在本原型系統(tǒng)中,都使用了數(shù)據(jù)訪問層中的SqlCommand對(duì)象調(diào)用存儲(chǔ)過程去執(zhí)行數(shù)據(jù)庫(kù)操作,很少直接在程序中使用SQL語句執(zhí)行數(shù)據(jù)庫(kù)操作。在一些例子中,可能見不到SqlCommand對(duì)象,因?yàn)榇鎯?chǔ)過程名直接傳遞給了數(shù)據(jù)訪問層相應(yīng)的功能函數(shù),但這仍將導(dǎo)致SqlCommand對(duì)象的創(chuàng)建。
2 基于.NET的B/S模式管理系統(tǒng)原型設(shè)計(jì)
我們選擇在Web開發(fā)中用的最多的通用權(quán)限子系統(tǒng)作為原型系統(tǒng)對(duì)學(xué)生進(jìn)行講解, 通用權(quán)限子系統(tǒng)具有通用性,能夠方便地集成到其他系統(tǒng)中。我們對(duì)數(shù)據(jù)庫(kù)設(shè)計(jì)[4~5]、應(yīng)用邏輯層和數(shù)據(jù)層、Web 頁面設(shè)計(jì)、Web菜單設(shè)計(jì)一系列開發(fā)過程給予詳細(xì)的分析。
2.1 數(shù)據(jù)庫(kù)設(shè)計(jì)
通用權(quán)限子系統(tǒng)數(shù)據(jù)設(shè)計(jì)如圖2所示。
⑴ 用戶(User)
User表的作用是提供可訪問Web應(yīng)用系統(tǒng)的登錄帳戶和密碼。用戶是有權(quán)使用本系統(tǒng)的人。主要字段包括用戶ID(UserID)、密碼(Password)、用戶級(jí)別(UserLevel)、用戶名(Name),UserID為關(guān)鍵字。
⑵ 組(Group)
Group表的意圖是提供對(duì)資源的訪問權(quán)限,不同的組具有不同的訪問權(quán)限,同一類用戶定義為一個(gè)組。主要字段包括組名(GroupName)、讀取權(quán)限(ReadRight)、添加權(quán)限(AddRight)、編輯權(quán)限(EditRight)、刪除權(quán)限(DeleteRight)、審核權(quán)限(AuditRight)等,GroupName作為關(guān)鍵字。在我們的模型中將用戶組分為兩類:系統(tǒng)組和自定義組。系統(tǒng)組即系統(tǒng)一開始就設(shè)定的組。系統(tǒng)組包括:超級(jí)管理員組、普通管理員組、過客組等。
自定義組:由超級(jí)管理員用戶定義的組。例如,可以定義:全權(quán)瀏覽組、審核組等。
⑶ 用戶組成員(UserGroup)
UserGroup表是User表和Group表的關(guān)系表。GroupName和UserID是這個(gè)表的組合關(guān)鍵字。一個(gè)用戶可以隸屬于多個(gè)組。用戶與組的多對(duì)多聯(lián)系通過“用戶組成員”UserGroup表體現(xiàn)。用戶所在組的權(quán)限就是該用戶所具有的權(quán)限。
⑷ 系統(tǒng)模塊(Module)
系統(tǒng)模塊表Module是描述一個(gè)功能頁面、一個(gè)菜單項(xiàng)或一個(gè)文件等資源的實(shí)體。Module表的字段包括模塊ID(ModuleID),該字段為關(guān)鍵字、模塊名稱(ModuleName)、 Aspx或Ascx文件名稱或菜單名稱(FileName)、模塊類型(ModuleType),常用模塊類型主要分為菜單項(xiàng)、Web用戶控件、Web服務(wù)器控件、Web頁面、窗口、應(yīng)用程序文件、資源文件等。
⑸ 用戶組模塊(GroupModule)
定義每個(gè)用戶組具有某個(gè)模塊的訪問權(quán)限。如果某個(gè)用戶組對(duì)某個(gè)模塊沒有相關(guān)記錄,則認(rèn)為該用戶組對(duì)該模塊沒有任何權(quán)限。該表是Group表和Module表的關(guān)系表,GroupName和ModuleID為組合關(guān)鍵字。
2.2 數(shù)據(jù)層和業(yè)務(wù)邏輯層的設(shè)計(jì)
在基于SQL Server數(shù)據(jù)庫(kù)的邏輯和物理數(shù)據(jù)庫(kù)實(shí)現(xiàn)之后,就可用RapidTier等工具軟件快速生成具有標(biāo)準(zhǔn)格式的基于VB或C#三層架構(gòu)的框架源代碼。我們采用RapidTier工具自動(dòng)生成的項(xiàng)目中BuildSolution.bat批處理文件為編譯產(chǎn)生源代碼文件; InportSPs.bat批處理文件幫助產(chǎn)生Sql存儲(chǔ)過程(包括所有表的Insert、Add、Delete和Modify操作)。RapidTier工具產(chǎn)生的三層實(shí)現(xiàn)模式如圖3所示。
在RapidTier工具產(chǎn)生的解決方案中包括如下三個(gè)獨(dú)立的工程。
⑴ Model工程:該項(xiàng)目中的類為數(shù)據(jù)實(shí)體,類中只包含屬性,其屬性對(duì)應(yīng)數(shù)據(jù)庫(kù)中表的各個(gè)字段信息。即數(shù)據(jù)實(shí)體類的實(shí)例通常對(duì)應(yīng)表的一條記錄,可從數(shù)據(jù)庫(kù)提取記錄信息到該實(shí)體對(duì)象,或用該實(shí)體對(duì)象添加或修改數(shù)據(jù)庫(kù)中表的記錄。
⑵ DAL工程:該項(xiàng)目為數(shù)據(jù)訪問層,所有的類均從DaoBase基類繼承,該基類提供可擴(kuò)展的數(shù)據(jù)訪問功能,如連接信息、共有屬性等。該項(xiàng)目中的每一個(gè)類中的接口(即方法)提供一個(gè)表的Select、Insert、Update、Delete等數(shù)據(jù)庫(kù)操作方法;Select方法通常返回DataTable或DataSet對(duì)象; Insert、Update、Delete方法返回Boolean或Integer。對(duì)于Insert和Update方法,參數(shù)類型為Model項(xiàng)目中的相應(yīng)數(shù)據(jù)實(shí)體,該項(xiàng)目中實(shí)體對(duì)象的方法通常被BLL層(業(yè)務(wù)邏輯層)中的對(duì)象調(diào)用。底層操作數(shù)據(jù)庫(kù)所采用的技術(shù)為微軟提供的數(shù)據(jù)應(yīng)用訪問塊Application Blocks for .NET,其中SqlHelper類中提供的共享方法直接操作數(shù)據(jù)庫(kù)。
⑶ BLL工程:該層為業(yè)務(wù)邏輯層,為表示層提供訪問接口。業(yè)務(wù)邏輯層控制如字段級(jí)的驗(yàn)證,可能還有一些不能在單個(gè)列中表示的包含不同實(shí)體或概念的更高級(jí)的業(yè)務(wù)規(guī)則等,通常都放在該層中。業(yè)務(wù)邏輯層對(duì)象通過訪問DAL層中的方法返回DataTable、DataSet或數(shù)據(jù)實(shí)體到表示層。該層中的實(shí)體對(duì)象不會(huì)直接訪問數(shù)據(jù)庫(kù)。
三個(gè)工程的關(guān)系是:DAL工程負(fù)責(zé)直接與數(shù)據(jù)庫(kù)中的數(shù)據(jù)表進(jìn)行存取操作。BLL工程通過調(diào)用DAL工程中的方法來實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的間接操作,同時(shí)添加業(yè)務(wù)邏輯代碼,只有BLL工程可以直接調(diào)用DAL工程中的方法,不可以跨層調(diào)用(Web即表示層不能直接訪問DAL層中的對(duì)象)。 Web表示層(或桌面應(yīng)用程序)通過調(diào)用BLL層的方法來實(shí)現(xiàn)與用戶的交互,同時(shí)Web層中對(duì)輸入數(shù)據(jù)進(jìn)行一些初級(jí)驗(yàn)證。Model提供數(shù)據(jù)實(shí)體供Web、BLL、DAL三層之間進(jìn)行數(shù)據(jù)傳遞。DAL工程、BLL工程和Model工程均為類庫(kù)工程,編譯后為DLL動(dòng)態(tài)連接庫(kù)。在ASP.NET中,它們的引用關(guān)系是WEB工程引用BLL工程和Model工程即包含Imports Tyqx.BLL和Imports Tyqx.Model語句;BLL工程引用DAL工程和Model工程,其中Tyqx為該項(xiàng)目的名稱空間。
2.3 Web頁面模版的設(shè)計(jì)
B/S管理信息系統(tǒng)的頁面框架模式如圖4所示。
頁面采用框架模式,或基于VS2008的母版頁方式建立;頁面頂部顯示系統(tǒng)名稱,底部顯示版權(quán)和其他信息,中間的左邊固定顯示功能菜單,中間的右邊區(qū)域?yàn)楣δ茼撁娴牟僮鲄^(qū)。該頁面框架模式為通行的B/S信息管理系統(tǒng)的典型界面操作模式。
對(duì)于頁面的設(shè)計(jì),首先我們遵循每個(gè)Page對(duì)應(yīng)一張表的CRUD操作,在此基礎(chǔ)上增加表關(guān)系的查詢?yōu)g覽和統(tǒng)計(jì)頁面等高級(jí)功能頁面。
2.4 菜單設(shè)計(jì)
采用sdmenu菜單開發(fā)工具可以非常方便地設(shè)計(jì)具有優(yōu)秀界面的Web菜單。sdmenu菜單開發(fā)工具界面如圖5所示。在選擇好菜單模板后,編輯好自己的菜單,然后設(shè)置各菜單所對(duì)應(yīng)的超連接頁面,再通過該工具中Publish菜單將Java腳本代碼直接發(fā)布到Web頁面中,之后將腳本文件和image圖片目錄拷貝到Web項(xiàng)目所在的目錄下即可。
3 基于原型設(shè)計(jì)的實(shí)驗(yàn)過程
3.1 讓學(xué)生了解原型設(shè)計(jì)
教師通過上述原型設(shè)計(jì)系統(tǒng)中的數(shù)據(jù)庫(kù)文檔,對(duì)于三層開發(fā)模式、系統(tǒng)體系架構(gòu)、Web設(shè)計(jì)模式、Web界面設(shè)計(jì)和Web菜單設(shè)計(jì)等應(yīng)向?qū)W生詳盡描述一般項(xiàng)目的開發(fā)過程,為了提高學(xué)生的動(dòng)手能力,我們還專門將原型系統(tǒng)的設(shè)計(jì)過程通過視頻軟件記錄下來,讓學(xué)生邊學(xué)邊做,起到了良好的教學(xué)效果。在.Net綜合實(shí)驗(yàn)實(shí)訓(xùn)課上,我們開發(fā)了數(shù)套從文檔到代碼的項(xiàng)目案例,以便學(xué)生課后研究并為項(xiàng)目開發(fā)提供參考。
3.2 以原型設(shè)計(jì)為模板,讓學(xué)生參照進(jìn)行開發(fā)
按照數(shù)據(jù)庫(kù)簡(jiǎn)單明了和與學(xué)生有密切關(guān)系的原則選擇典型項(xiàng)目,如表1所示。
3.3 基礎(chǔ)代碼的實(shí)現(xiàn)
⑴ 從典型項(xiàng)目中任意選擇一個(gè)項(xiàng)目,根據(jù)給定的邏輯表結(jié)構(gòu)和表的關(guān)系的文檔,讓學(xué)生在Sql Server 2005中設(shè)計(jì)好關(guān)系數(shù)據(jù)庫(kù);
⑵ RapidTier工具產(chǎn)生基于C#的三層架構(gòu)原代碼項(xiàng)目框架,然后使用Visual Studio S2008打開項(xiàng)目,添加ASP.NET Web應(yīng)用程序,并添加相應(yīng)項(xiàng)目的引用;
⑶ 執(zhí)行RapidTier工具自動(dòng)生成的InportSPs.bat批處理文件,該批處理文件用來自動(dòng)建立基于每張表的CRUD操作的存儲(chǔ)過程。項(xiàng)目中的數(shù)據(jù)庫(kù)操作全部通過存儲(chǔ)過程完成,避免在代碼中直接使用Sql語句;
⑷ 使用sdmenu菜單開發(fā)工具開發(fā)相應(yīng)管理系統(tǒng)的Web菜單;
⑸ 根據(jù)給定的原型系統(tǒng)的Web頁面模版,讓學(xué)生設(shè)計(jì)登錄頁面、各相應(yīng)數(shù)據(jù)表的CRUD操作頁面、部分高級(jí)功能頁面等。
3.4 上交實(shí)驗(yàn)項(xiàng)目報(bào)告書
學(xué)生根據(jù)給定的步驟完成項(xiàng)目的開發(fā),然后編寫開發(fā)過程,完成項(xiàng)目架構(gòu)->數(shù)據(jù)庫(kù)設(shè)計(jì)->Web菜單->頁面設(shè)計(jì)->代碼編寫這一系列的過程,讓學(xué)生將這一系列過程書寫成實(shí)驗(yàn)項(xiàng)目報(bào)告書,作為開發(fā)實(shí)例遞交作業(yè),把作業(yè)的成績(jī)核定為占實(shí)訓(xùn)總成績(jī)的40%。本實(shí)驗(yàn)項(xiàng)目從2009年在蘇州大學(xué)應(yīng)用技術(shù)學(xué)院實(shí)施以來,經(jīng)過調(diào)查,有90%的學(xué)生反映教學(xué)效果非常好,另有10%學(xué)生反映原型系統(tǒng)有些簡(jiǎn)單,與實(shí)際項(xiàng)目開發(fā)有一定的距離。
4 結(jié)束語
采用原型系統(tǒng)的教學(xué)方法,與在計(jì)算機(jī)專業(yè)課教學(xué)中采用“以任務(wù)驅(qū)動(dòng)的教學(xué)模式”[8]進(jìn)行專業(yè)實(shí)訓(xùn)課教學(xué)具有相同的功效,能夠使學(xué)生真正成為課堂的主體,使教師成為學(xué)生學(xué)習(xí)的引導(dǎo)者。學(xué)生由被動(dòng)接受者轉(zhuǎn)變?yōu)橹鲃?dòng)探究者,可促進(jìn)學(xué)生的獨(dú)立性,讓學(xué)生從教師精選出的有限任務(wù)中,主動(dòng)地獲得良好的開發(fā)體驗(yàn)。“原型系統(tǒng)”教學(xué)法在任務(wù)的安排、人員分配、項(xiàng)目的功能定義等方面還有待進(jìn)一步研究和提升。
參考文獻(xiàn):
[1] 黃志軍,陳修亮,沈科宇.基于ADO.NET油料裝備管理系統(tǒng)多層架構(gòu)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)與數(shù)字工程,2007.5:167-170
[2] 王海暉,杜卉.基于Visual C#.Net教學(xué)研究項(xiàng)目管理系統(tǒng)的開發(fā)[J].計(jì)算機(jī)與數(shù)字工程,2006.10:130-132
[3] 趙宏偉,秦昌明.基于B/S 3層體系結(jié)構(gòu)的軟件設(shè)計(jì)方法研究[J].實(shí)驗(yàn)技術(shù)與管理,2011.7:64-66
[4] 嚴(yán)悍,張宏,許滿武.基于角色訪問控制對(duì)象建模及實(shí)現(xiàn)[J].計(jì)算機(jī)學(xué)報(bào),2000.23(10):1064-1071
[5] 蔣瑋,胡仁杰.基于角色的訪問控制模型在實(shí)驗(yàn)室教學(xué)管理系統(tǒng)中的應(yīng)用[J].實(shí)驗(yàn)室研究與探索,2007.6:4-6
[6] 皮之軍,李建海,于敏等.開放式實(shí)驗(yàn)教學(xué)模式的研究與探索[J].實(shí)驗(yàn)技術(shù)與管理,2010.27(5):27-29
[7] 張勇,劉軍山,黃啟來.實(shí)驗(yàn)教學(xué)模式創(chuàng)新與課堂教學(xué)設(shè)計(jì)[J].實(shí)驗(yàn)技術(shù)與管理,2010.27(6):15-17
[8] 田海梅,張燕.基于任務(wù)驅(qū)動(dòng)的計(jì)算機(jī)專業(yè)課教學(xué)模式[J].實(shí)驗(yàn)技術(shù)與管理,2011.5:145-147
[9] 毛玉萃,趙植武.校內(nèi)IT項(xiàng)目實(shí)踐模式的探索[J].實(shí)驗(yàn)室研究與探索,2007.26(3):103-104
[10] 蔡曉.高校實(shí)驗(yàn)室MIS分析與設(shè)計(jì)[J].實(shí)驗(yàn)技術(shù)與管理,2001.18(6):35-37