丁純立
(福建信息職業技術學院,福建 福州 350003)
隨著企業對信息化產品的依賴越來越強,相關的軟件產品的功能也越來越強大,軟件結構越來越復雜,對于大型復雜的軟件系統來說,開發、維護成本高、重復開發率高、開發效率低越來越困擾著軟件開發者,尤其在進行團隊開發時情況更是嚴重。在此背景下,人們認識到對總體的系統結構設計比起對計算的算法和數據結構的選擇已經變得更加重要。
為了克服上述問題,人們總結程序開發的經驗,提出采用分層的方式進行處理,在分層軟件框架設計中最成熟的就是三層架構的分層方案,即把系統從應用邏輯上對其進行抽象細分用戶界面層(UI),業務邏輯層(BLL),數據訪問層(DAL)三個層次,同時再加上共用實體類和一些通用輔助類,如數據庫訪問類、事務處理類等。以上的設計提高了軟件代碼的復用質量,但還存在許多問題,如缺乏安全管理,缺乏用戶登錄日志管理,各層之間的耦合度不能讓人滿意;在數據訪問層還是存在冗余代碼,工作重復現象,因此必須對三層架構進行有效擴充才能滿足用戶需求。
文中將結合.NET平臺所提供的相關技術,構建出一個基于三層架構設計思想、面向對象、可復用的信息系統軟件開發框架,下面進行具體分析。
1.用戶界面層:直接和用戶進行交互,把數據內容呈現給用戶或接收用戶輸入的數據的部分。在一般的分層架構解決方案中,表示層的設計是根據用戶所選的不同控件,將實體類的值綁定到對應控件的屬性上,以完成數據的自動獲得與顯示。這種方法的缺點是,大型應用程序都有非常多的頁面,對每個頁面進行控件與實體類屬性的對應,代碼量大且重復率高,隨著需求的變化,調整就更加繁瑣,為了解決上述問題,框架將用戶界面層分成了UI和UI控制邏輯層,在UI層設計了界面頁面的基類PageBase.cs,系統中的每個UI界面類都從PageBase.cs繼承,在 PageBase.cs中,定義了 ErrorMsg出錯提示,ErrorState出錯狀態,ActionPage動作頁面,Action執行動作等公共變量,讓每一個表示層頁面的操作與邏輯層的操作都有返回信息與狀態,這樣不僅可以更好的控制和判斷程序,同時通過記錄每個頁面的公共變量值還可以實現應用程序的異常管理,用戶登錄日志管理等功能,這些功能也是一個成功的框架中必不可少的重要組成部分。在UI控制邏輯層設計了一個公共類DORM.CS,用以將web頁面控件的值自動賦值到哈希表中,主要的設計思路是,通過獲取頁面上以“UI_”這個命名的控件,取相應的控件名和值,分別保存在哈希表里面對應的KEY、values里面,然后返回哈希表,以此來解決繁瑣的頁面控件與實體類屬性對應操作的問題。
2.業務邏輯層:主要是處理業務方面的邏輯。在這一層中,框架將BLL層細分為業務邏輯接口層和業務邏輯實現層,在業務邏輯接口層抽象出了用戶界面層所需要用到的功能,并將這些接口統一放在DAO_Interface接口文件中,主要接口如圖1所示

圖1 業務邏輯接口
這一層可以讓團隊成員獨立開發而減少相互間的依賴性。就是說業務邏輯實現層里還沒寫實現過程的時候,項目組的其它成員,可以先調用而不用管它是怎么實現的,從而提高協同效率。業務邏輯實現層繼承業務邏輯接口層,然后根據具體不同的要求來實現。
3.數據訪問層:
這一層用于實現信息系統對數據庫的操作,完成業務流程對數據庫中數據的插入、更新等操作。在這一層中,框架封裝了所有BLL層需要用到的數據庫操作,并將其放入DALCommon類文件,以保證數據訪問層只有單一訪問接口,減少各層之間的耦合性。
在傳統的數據訪問層中,一般采用輔助類,如SqlHelper通過一組靜態的重載方法來封裝數據訪問功能,開發時可以通過調用輔助類的靜態方法來對數據庫進行操作,這種方法雖然解決了部分代碼復用問題,但還是存在當需求變化時,需對一系列相關模塊進行修改的問題,而且在團隊開發中極易出現開發代碼重復現象,為了解決上述問題,在本框架的數據訪問層引入Ibatis開源框架。IBatis.net具有完全由開發者掌控Mapping規則。基于XML配置,開發者可掌控底層,傳入參數支持 Hashtable、EntityObje,Dictionary等.可將離散參數封裝為單一參數傳入等優點;這樣當需求變化時,只需修改相應Xml文件中的SQl語句即可,其它部分都可以不用改動,以保證接口穩定度。
IBatis DataMapper的工作原理如圖2所述。

圖2 Ibatis實現原理
properties.config:數據庫配置信息(包含數據名、用戶名、密碼、地址)
proivders.config數據庫驅動(包含.Net所有的數據庫驅動)
Maps文件夾:包含整個數據庫各表和各模型的關系.(主要是包含SQL語句)
Model文件夾:包含各個表的模型
在DALCommon類文件中數據訪問層通過Map ID和Hashtable對進行執行操作,在本層中,日志記錄采用Log4net技術,下面通過查詢操作來展示軟件框架代碼的具體實現。
public DataSet Select(Hashtable hTable,ref string errMsg,ref bool errState,ref string ActionPage,string MapID)//帶參數的查詢


最后形成的框架如圖3所示:

圖3 軟件框架結構圖
在大型應用軟件中一個面向對象的、可復用的信息系統軟件框架已經成為一個軟件開發團隊的核心物質資本,而且更重要的是軟件框架將是一個系統的開發周期、開發成本及軟件維護的核心影響因子。本文所設計的框架具有以下特點:(1)在用戶界面層使用UI控制邏輯層,解決對頁面控件的煩瑣的操作,并且配合業務邏輯層和數據訪問層的操作;(2)使用業務邏輯接口層和業務邏輯實現層,來實現項目各模塊的獨立開發和共享功能;(3)使用IBatis技術作為數據訪問層解決了項目各模塊對數據頻繁操作及維護困難的問題;(4)通過記錄每個頁面的公共變量值以實現應用程序的異常管理,用戶登錄日志管理等功能。在有關學校的信息管理系統中得到成功應用,實踐證明,應用本框架省略了很多基礎性的工作,開發周期大大縮短,同時大大降低了各層之間耦合度和減少了軟件的冗余代碼,極大的提高了軟件生產率。