李紹華+馮晶瑩
摘要:該文將傳統(tǒng)三層架構(gòu)模式和基于抽象工廠模式的三層架構(gòu)進(jìn)行了對比?;诟倪M(jìn)的三層架構(gòu)模式,使用Visual Stu-dio 2013和SQL Server 2012設(shè)計和開發(fā)了科研項目管理系統(tǒng),實現(xiàn)項目管理的信息化。使用存儲過程提高系統(tǒng)的執(zhí)行效率和安全性。
關(guān)鍵詞:科研系統(tǒng);三層架構(gòu);抽象工廠;ASP.NET
1背景
隨著高校教師對科研項目申報數(shù)量的增加,項目管理部門的任務(wù)日漸繁重,而使用傳統(tǒng)手工方式對項目進(jìn)行管理的形式越來越不能適應(yīng)時代發(fā)展的要求,嚴(yán)重影響了相關(guān)人員的工作效率和準(zhǔn)確性。
信息化和網(wǎng)絡(luò)化進(jìn)程的不斷加速,在大數(shù)據(jù)時代通過運用現(xiàn)代網(wǎng)絡(luò)和計算機技術(shù),構(gòu)建高效和實用的信息管理平臺,實現(xiàn)科研項目管理工作的數(shù)字化成為可能,它可以有效的縮短管理時間、簡化管理過程。
2三層架構(gòu)體系結(jié)構(gòu)
NET軟件項目設(shè)計為了實現(xiàn)“高內(nèi)聚、低耦合”的設(shè)計思想,通常使用三層架構(gòu)模式(視圖層、業(yè)務(wù)邏輯層和數(shù)據(jù)訪問層),將項目代碼根據(jù)功能寫在不同的層次模型中。如圖1所示。
1)視圖層:直接和用戶進(jìn)行交互,收集用戶在界面中輸入的數(shù)據(jù)并通過調(diào)用方法時,實參給形參傳值,傳遞給業(yè)務(wù)邏輯層;將業(yè)務(wù)邏輯層方法返回的數(shù)據(jù)以某種形式顯示在界面中。
2)業(yè)務(wù)邏輯層:負(fù)責(zé)數(shù)據(jù)的加工處理,在視圖層和數(shù)據(jù)訪問層之間起到數(shù)據(jù)中轉(zhuǎn)站的作用。
3)數(shù)據(jù)訪問層:負(fù)責(zé)數(shù)據(jù)的存儲和讀取。根據(jù)業(yè)務(wù)邏輯層傳遞過來的指令和數(shù)據(jù),通過INSERT、UPDATE、DELETE或SELECT語句操作數(shù)據(jù)庫。.NET框架中使用ADO.NET的連接類、命令類、數(shù)據(jù)讀取類、數(shù)據(jù)適配器類和數(shù)據(jù)集類等操作數(shù)據(jù)庫。
4)實體層:將數(shù)據(jù)庫中關(guān)系型表進(jìn)行面向?qū)ο蠡幚?,實現(xiàn)數(shù)據(jù)對象在視圖層和業(yè)務(wù)邏輯層之間的傳遞。
根據(jù)項目規(guī)模和需求,可以選擇Oracle、SQL Server、DB2、Sybase、MySQL、Access等關(guān)系型數(shù)據(jù)庫。這些數(shù)據(jù)庫都遵循結(jié)構(gòu)化查詢語句(Structure Query Language,SQL),但不同數(shù)據(jù)庫的SQL文、存儲過程、函數(shù)、觸發(fā)器、游標(biāo)的使用規(guī)則不盡相同。
在ADO.NET框架中,針對不同數(shù)據(jù)庫使用不同的命名空間中的類。例如:
在傳統(tǒng)的三層架構(gòu)體系中,視圖層依賴于業(yè)務(wù)邏輯層,業(yè)務(wù)邏輯層依賴于數(shù)據(jù)訪問層。如果后臺使用的數(shù)據(jù)庫發(fā)生變化,數(shù)據(jù)訪問層和業(yè)務(wù)邏輯層的代碼都需要大量修改,不利于系統(tǒng)的擴展。3抽象工廠模式
例如,A廠生產(chǎn)布料,B廠生產(chǎn)紐扣,c廠生產(chǎn)針線。但客戶要的是衣服,這樣就需要一個D廠,D就是專門制作衣服的??蛻粜枰路槐厝フ褹BC廠,直接找D即可??蛻粢膊槐刂繢的衣服是怎樣做成的。ABC廠的變化不會直接影響到客戶。
抽象工廠模式提供創(chuàng)建一系列相關(guān)或相互依賴的接口,而無需指定他們具體的類。從字面上的理解就是給上一層或調(diào)用者提供一系列功能的接口,讓上層或調(diào)用者自己去實現(xiàn)。在具體工廠中負(fù)責(zé)創(chuàng)建產(chǎn)品結(jié)構(gòu)中每個產(chǎn)品,它包含了創(chuàng)建不同產(chǎn)品的商業(yè)邏輯,實現(xiàn)抽象工廠中的接口,定義產(chǎn)品的共同接口。
抽象工廠模式可有效降低模塊間的耦合性,最大限度地實現(xiàn)軟件復(fù)用,實現(xiàn)“高內(nèi)聚、低耦合”的設(shè)計目的。
4基于抽象工廠模式的三層架構(gòu)體系
為了解決傳統(tǒng)三層架構(gòu)模式層與層高依賴度,不利于擴展的弊端,推薦使用基于抽象工廠模式的三層架構(gòu)體系。抽象工廠模式引入了面向接口編程思想,使上層類不具體依賴于下層類,而只依賴于下層提供的一個接口。將數(shù)據(jù)訪問層細(xì)分為數(shù)據(jù)接口層、數(shù)據(jù)接口實現(xiàn)層、數(shù)據(jù)工廠層以及數(shù)據(jù)工具層,從而使得業(yè)務(wù)邏輯層依賴于數(shù)據(jù)接口層,與后臺數(shù)據(jù)庫不發(fā)生直接關(guān)系。基于工廠模式的三層架構(gòu)體系如圖2所示。
如果項目更換后臺數(shù)據(jù)庫,只需要修改抽象工廠模式的數(shù)據(jù)訪問層即可。
5科研系統(tǒng)的框架設(shè)計
1)使用Visual Studio 2013創(chuàng)建名為SRM的空白解決方案。新增名為SRMUI的ASP.NET空網(wǎng)站項目;名為Business、DALFactory、DBUtility、Entity、IDAL、SQLServerDAL和ToolUtili-ty的類庫項目,如圖3所示。
為了便于統(tǒng)一管理,設(shè)置七個類庫項目的程序集名稱和默認(rèn)命名空間為SRM.Business、SRM.DALFactory、SRM.DBUtility、SRM.Entity、SRM.IDAL、SRM.SQLServerDAL和SRM.ToolUtili-ty。如圖4所示。
根據(jù)依賴關(guān)系,為程序集添加引用:SRMUI引用Business、Entity和ToolUtility;Business引用IDAL、DALFactory和Entity;DALFaetory引用IDAL;IDAL引用Entity;SQLServerDAL引用DBUtility、IDAL和Entity。
21為數(shù)據(jù)庫中每張表,在Business程序集中創(chuàng)建對應(yīng)的業(yè)務(wù)邏輯類,如圖5示。該層不直接依賴數(shù)據(jù)訪問層,而是依賴IDAL接口層和DALFaetory工廠層。通過工廠層創(chuàng)建程序集指定類的實例,并決定調(diào)用哪個數(shù)據(jù)訪問層的數(shù)據(jù)操作方法。
3)為數(shù)據(jù)庫中每張表,在Entity程序集中創(chuàng)建對應(yīng)的實體類,如圖6所示。實現(xiàn)數(shù)據(jù)以對象的形式在SRMUI、Business、IDAL和SQLServerDAL之間傳遞。
4)為數(shù)據(jù)庫中每張表,在IDAL程序集中創(chuàng)建對應(yīng)的數(shù)據(jù)接口,如圖7所示。接口中聲明了在SQLServerDAL程序集中實現(xiàn)的方法。
5)為數(shù)據(jù)庫中每張表,在SQLServerDAL程序集中創(chuàng)建對應(yīng)的數(shù)據(jù)接口實現(xiàn)類,實現(xiàn)IDAL程序集中接口的方法,如圖8所示。根據(jù)數(shù)據(jù)庫的類型,可以定義OracleDAL、MySQLDAL或AccessDAL等。
在SQLServerDAL程序集中,本項目使用存儲過程實現(xiàn)對數(shù)據(jù)庫的操作,原因如下:
①執(zhí)行效率高。存儲過程只在創(chuàng)建時進(jìn)行編譯,以后每次執(zhí)行存儲過程都不需再重新編譯,而SQL語句每執(zhí)行一次就編譯一次。
②方便事務(wù)處理。當(dāng)對數(shù)據(jù)庫進(jìn)行多個復(fù)雜操作時,可將復(fù)雜操作用存儲過程封裝起來與數(shù)據(jù)庫提供的事務(wù)處理結(jié)合一起使用。
③提高代碼復(fù)用性。存儲過程可以重復(fù)使用,減少數(shù)據(jù)庫開發(fā)人員的工作量。
④安全性高。通過權(quán)限設(shè)定,可指定只有某些用戶才具有對指定存儲過程的使用權(quán)。
⑤減少網(wǎng)絡(luò)流量。存儲過程位于服務(wù)器上,調(diào)用的時候只需要傳遞存儲過程名稱以及參數(shù)即可,降低網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)量。
6)在DALFactory程序集中添加DataAccess類,如圖9所示。DALFactory通過配置文件和反射機制實現(xiàn)SQLServerDAL的實例化,是通過多態(tài)機制實現(xiàn)的,如圖10所示。這樣的好處就是如果要更換數(shù)據(jù)庫,只需要更改Web.config配置文件,如圖11所示。
使用反射機制動態(tài)的創(chuàng)建類型的實例,將類型綁定到現(xiàn)有對象,或從現(xiàn)有對象中獲取類型應(yīng)用程序需要在運行時從某個特定的程序集中載人一個特定的類型,以便實現(xiàn)某個任務(wù)時可以用到反射。反射主要應(yīng)用于類庫,這些類庫需要知道一個類型的定義,以便提供更多的功能。
7)在DBUtility程序集中添加SQLDBHelper類,實現(xiàn)與SQLServer數(shù)據(jù)庫的交互。如圖12所示。根據(jù)數(shù)據(jù)庫的種類,可以定義0racleDBHelper、MySQLDBHelper或AccessDBHelper等。
8)在ToolUtility程序集中添加若干個工具類。如圖13所示。
6科研系統(tǒng)的運行
科研項目管理系統(tǒng)的首頁運行如圖14所示。
7結(jié)束語
科研項目管理信息化平臺可以實現(xiàn)對項目活動的全程跟蹤。信息化平臺將人員、項目、評審、成果和權(quán)限等管理有機結(jié)合在一起,有效地提高了項目成果管理水平和效率。基于抽象工廠模式三層體系架構(gòu)的使用,便于項目的移植和擴展。endprint