韋軍帥勇
(遵義醫(yī)學(xué)院醫(yī)學(xué)信息工程系 貴州 遵義 563000)
信息系統(tǒng),指的是利用各種信息技術(shù),尤其是硬件技術(shù)(如:網(wǎng)絡(luò)、計算機、存儲設(shè)備)和軟件技術(shù)(如:數(shù)據(jù)庫、中間件、開發(fā)平臺、運行環(huán)境)構(gòu)建的,能夠面向特定業(yè)務(wù)需求提供相應(yīng)業(yè)務(wù)信息處理和業(yè)務(wù)流程支持功能的系統(tǒng)。
Entity框架的全稱是ADO.NET Entity Framework,是微軟在NET Framework v3.5 SP1引入的新功能,比Linq To SQL更加強大的ORM(Object/Relational Mapping)框架,它讓開發(fā)人員只需要著眼于對象模型的開發(fā),而不需要考慮它們是如何與關(guān)系數(shù)據(jù)庫交互,該框架的主要特點:
· 支持多種數(shù)據(jù)庫(Microsoft SQL Server、Oracle和DB2等);
· 強勁的映射引擎,到Net4.0中能很好地支持存儲過程;
· 提供Visual Studio集成工具,進行可視化操作;
· 能夠 與 ASP.NET、WPF、WCF、WCF Data Services 進行很好的集成。
目前Entity Framework(EF)已經(jīng)開源,又有微軟強力推動,EF必將成為未來一段時間windows平臺的主流開發(fā)架構(gòu),面向程序員級的EF開發(fā)能夠在網(wǎng)上得到很多的范例和教程。然而,如何運用EF對信息系統(tǒng)分層以及在各層中布署,卻很少有涉及,作者在一次信息系統(tǒng)設(shè)計工作中,對此進行了初步的研究和實踐,取得了良好的效果。
如圖1,我們將系統(tǒng)分為6層,數(shù)據(jù)層(sqlsever2008)、持久層(Entity)、數(shù)據(jù)提供層(SQLServerProvider)、數(shù)據(jù)服務(wù)層(Business)、Web 事務(wù)層(Web),界面層(Web.UI)。 Web.Control用于存放自選開發(fā)的控件,YYControls存放第三方控件。
圖1 系統(tǒng)分層結(jié)構(gòu)
圖2 Web事務(wù)層
圖3 Category實體類的4種訪問方式
持久層通過EF將數(shù)據(jù)層數(shù)據(jù)庫表和視映射為Entity層實體類,表中字段對應(yīng)實體類屬性(property),如果有存諸過程或外鍵關(guān)系也能被Entity管理,這樣,客戶端編程人員就可以專注于業(yè)務(wù)中對象關(guān)系的處理,而不必知道數(shù)據(jù)存取的具體細節(jié),所有的實體類與一個管理類ObjectContext都寫在一個edmx中,這個edmx由開發(fā)平臺自動生成。
圖4 數(shù)據(jù)提供層
圖5 接口方法被DataProvider類繼承實現(xiàn)
Web事務(wù)層Interfaces文件夾(如圖2)中定義的接口規(guī)定客戶端訪問數(shù)據(jù)方式,每個接口文件定義edmx中一個實體類的數(shù)據(jù)訪問方式,每個實體類都有4種訪問方式,即:Add(向數(shù)據(jù)庫表增如記錄)、Remove(刪除記錄)、Update(修改記錄),Get(查詢)。每種訪問方式根據(jù)實際訪問需要有多個不同輸入?yún)?shù)的重載。如圖3:接口SY_Category_Interface.cs定義了Category實體類中4種向數(shù)據(jù)庫Categoty表的訪問方式(篇幅所限,沒有寫出所有方法,返回值也未給出),對應(yīng)于所有實體類的接口由一個總接口繼承 (public interface SY_Whole_Interface:SY_Archive_Interface,SY_Category_Interface,SY_Code_Interface,……),再在文件SY_Whole_Abstr-Class.cs中 以 public abstract class SY_Whole_AbstrClass:SY_Whole_Interface方式由虛類SY_Whole_AbstrClass繼承,至此,Web事務(wù)層完成了系統(tǒng)向上層提供的數(shù)據(jù)訪問功能的定義,并將這些功能封裝在虛類SY_Whole_AbstrClass中交給數(shù)據(jù)提供層(SQLServerProvider)實現(xiàn)。
數(shù)據(jù)提供層(SQLServerProvider)的功能很單純,實現(xiàn)Web事務(wù)層中接口定義的所有方法。每個Provider*.cs文件實現(xiàn)Web事務(wù)層Interfaces文件夾中對應(yīng)SY_*_Interface.cs定義的方法(如圖4),如:ProviderCategory.cs實 現(xiàn)SY_Category_Interface.cs中定義的方法(如圖 5),可見,SQLServerProvider層與Web層之間的通訊是通過繼承關(guān)系即 partial class DataProvider:SY_Whole_AbstrClass實現(xiàn),每個Provider*.cs文件實現(xiàn)DataProvider類的部分方法。
圖6 Bussiness層
圖7 Bussiness層服務(wù)的實現(xiàn)
Bussiness層(如圖6)將Provider層實現(xiàn)的數(shù)據(jù)訪問方法以服務(wù)的方式提供給Web.UI界面層。在這層,每個類對應(yīng)一個實體類(數(shù)據(jù)庫表),如文件CategoryService.cs中存放的類CategoryService就是為界面層提供對數(shù)據(jù)庫表SYS_Category的訪問服務(wù),其服務(wù)方式實際就是調(diào)用Provider層DataProvider類一個實例的相應(yīng)方法 (如圖7),與Bussinessr層不同的是,Provider層實現(xiàn)了對所有數(shù)據(jù)庫實體的訪問方法,但這些方法都屬于同一個類DataProvider。Bussiness重新將服務(wù)按實體類(數(shù)據(jù)庫表)分別提供的目的主要在于避免UI層開發(fā)人員感到迷惑。
在上述6層結(jié)構(gòu)中,數(shù)據(jù)層是數(shù)據(jù)提供者,UI層是數(shù)據(jù)最終消費者,Entity層將數(shù)據(jù)庫實體映射為程序中的實體類,Web層定義能提供的數(shù)據(jù)訪問方式,Provider層實現(xiàn)這些方式然后傳給Bussiness層以服務(wù)的方式向UI層提供,每一層功能明確,服務(wù)與被服務(wù)關(guān)系明確,使系統(tǒng)具有很好的可靠性、擴展性,只要數(shù)據(jù)庫結(jié)構(gòu)不是根本性變化,都可只在Entity層作少量的修改,系統(tǒng)就能滿足新的業(yè)務(wù)需求。
[1]李智偉.基于ASM的元模型形式化語義的研究[J].計算機應(yīng)用究,2012(01):161-164.
[2]孫宏旭.基于有限狀態(tài)機的模型轉(zhuǎn)換方法的研究[J].計算機技術(shù)與發(fā)展,2012(2):10-13,17.
[3]曾一.支持MDA的設(shè)計模式建模與模型轉(zhuǎn)換方法研究[J].計算機工程與應(yīng)用,2012(1):76-80.
[4]馬于濤.一種Web服務(wù)綜合描述模型[J].電子與信息學(xué)報,2012(3):549-556.