韋軍帥勇
(遵義醫學院醫學信息工程系 貴州 遵義 563000)
信息系統,指的是利用各種信息技術,尤其是硬件技術(如:網絡、計算機、存儲設備)和軟件技術(如:數據庫、中間件、開發平臺、運行環境)構建的,能夠面向特定業務需求提供相應業務信息處理和業務流程支持功能的系統。
Entity框架的全稱是ADO.NET Entity Framework,是微軟在NET Framework v3.5 SP1引入的新功能,比Linq To SQL更加強大的ORM(Object/Relational Mapping)框架,它讓開發人員只需要著眼于對象模型的開發,而不需要考慮它們是如何與關系數據庫交互,該框架的主要特點:
· 支持多種數據庫(Microsoft SQL Server、Oracle和DB2等);
· 強勁的映射引擎,到Net4.0中能很好地支持存儲過程;
· 提供Visual Studio集成工具,進行可視化操作;
· 能夠 與 ASP.NET、WPF、WCF、WCF Data Services 進行很好的集成。
目前Entity Framework(EF)已經開源,又有微軟強力推動,EF必將成為未來一段時間windows平臺的主流開發架構,面向程序員級的EF開發能夠在網上得到很多的范例和教程。然而,如何運用EF對信息系統分層以及在各層中布署,卻很少有涉及,作者在一次信息系統設計工作中,對此進行了初步的研究和實踐,取得了良好的效果。
如圖1,我們將系統分為6層,數據層(sqlsever2008)、持久層(Entity)、數據提供層(SQLServerProvider)、數據服務層(Business)、Web 事務層(Web),界面層(Web.UI)。 Web.Control用于存放自選開發的控件,YYControls存放第三方控件。

圖1 系統分層結構

圖2 Web事務層

圖3 Category實體類的4種訪問方式
持久層通過EF將數據層數據庫表和視映射為Entity層實體類,表中字段對應實體類屬性(property),如果有存諸過程或外鍵關系也能被Entity管理,這樣,客戶端編程人員就可以專注于業務中對象關系的處理,而不必知道數據存取的具體細節,所有的實體類與一個管理類ObjectContext都寫在一個edmx中,這個edmx由開發平臺自動生成。

圖4 數據提供層

圖5 接口方法被DataProvider類繼承實現
Web事務層Interfaces文件夾(如圖2)中定義的接口規定客戶端訪問數據方式,每個接口文件定義edmx中一個實體類的數據訪問方式,每個實體類都有4種訪問方式,即:Add(向數據庫表增如記錄)、Remove(刪除記錄)、Update(修改記錄),Get(查詢)。每種訪問方式根據實際訪問需要有多個不同輸入參數的重載。如圖3:接口SY_Category_Interface.cs定義了Category實體類中4種向數據庫Categoty表的訪問方式(篇幅所限,沒有寫出所有方法,返回值也未給出),對應于所有實體類的接口由一個總接口繼承 (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事務層完成了系統向上層提供的數據訪問功能的定義,并將這些功能封裝在虛類SY_Whole_AbstrClass中交給數據提供層(SQLServerProvider)實現。
數據提供層(SQLServerProvider)的功能很單純,實現Web事務層中接口定義的所有方法。每個Provider*.cs文件實現Web事務層Interfaces文件夾中對應SY_*_Interface.cs定義的方法(如圖4),如:ProviderCategory.cs實 現SY_Category_Interface.cs中定義的方法(如圖 5),可見,SQLServerProvider層與Web層之間的通訊是通過繼承關系即 partial class DataProvider:SY_Whole_AbstrClass實現,每個Provider*.cs文件實現DataProvider類的部分方法。

圖6 Bussiness層

圖7 Bussiness層服務的實現
Bussiness層(如圖6)將Provider層實現的數據訪問方法以服務的方式提供給Web.UI界面層。在這層,每個類對應一個實體類(數據庫表),如文件CategoryService.cs中存放的類CategoryService就是為界面層提供對數據庫表SYS_Category的訪問服務,其服務方式實際就是調用Provider層DataProvider類一個實例的相應方法 (如圖7),與Bussinessr層不同的是,Provider層實現了對所有數據庫實體的訪問方法,但這些方法都屬于同一個類DataProvider。Bussiness重新將服務按實體類(數據庫表)分別提供的目的主要在于避免UI層開發人員感到迷惑。
在上述6層結構中,數據層是數據提供者,UI層是數據最終消費者,Entity層將數據庫實體映射為程序中的實體類,Web層定義能提供的數據訪問方式,Provider層實現這些方式然后傳給Bussiness層以服務的方式向UI層提供,每一層功能明確,服務與被服務關系明確,使系統具有很好的可靠性、擴展性,只要數據庫結構不是根本性變化,都可只在Entity層作少量的修改,系統就能滿足新的業務需求。
[1]李智偉.基于ASM的元模型形式化語義的研究[J].計算機應用究,2012(01):161-164.
[2]孫宏旭.基于有限狀態機的模型轉換方法的研究[J].計算機技術與發展,2012(2):10-13,17.
[3]曾一.支持MDA的設計模式建模與模型轉換方法研究[J].計算機工程與應用,2012(1):76-80.
[4]馬于濤.一種Web服務綜合描述模型[J].電子與信息學報,2012(3):549-556.