郭亞平,馬新春,張 麗
(新疆電子研究所有限公司 新疆 烏魯木齊 830049)
.Net下基于數據庫組件的ORM中間件的設計與實現
郭亞平,馬新春,張 麗
(新疆電子研究所有限公司 新疆 烏魯木齊830049)
文中介紹.Net開發環境下,通過自定義數據庫訪問控件和對象關系映射技術(Object Relational Mapping,簡稱ORM)實現的一種全新的數據持久層中間件。該中間件實現數據庫表對象到用戶UI控件的自動映射,在降低對開發人員數據庫開發技術掌握水平要求的同時,大大提高開發效率,使開發人員可以致力于后臺邏輯與用戶UI設計,為用戶帶來更好的體驗。本中間件通過我公司在新疆維吾爾自治區開發的多個管理信息系統(MIS)的應用與實踐,已經驗證了其快捷性、穩定性和可伸縮性,能夠有效的提高軟件開發效率。
.Net;數據庫控件;對象關系映射;中間件;管理信息系統
管理信息系統 (Management Information System,MIS)是一個以人為主導,利用計算機硬件、軟件、網絡通信設備以及其他辦公設備,進行信息的收集、傳輸、加工、儲存、更新、拓展和維護的系統[1]。是當前企事業以及政府信息化的一種主流的系統軟件模式。在管理信息系統中,通過數據訪問層操作數據庫實現對信息的存儲訪問是其最基本而且必不可少的組成部分。用傳統的方法開發數據訪問層,存在編碼工作重復、編碼質量不一、代碼可移植性差、可重用性低、難以維護等問題。對象關系映射(Object Relational Mapping,ORM)是通過使用描述對象和數據庫之間映射的元數據,將應用中的對象自動持久化到關系數據庫中,從而可以有效解決上述傳統數據訪問層存在的問題。目前已有的.Net下的幾種ORM中間件解決方案,如Nhibernate、Subsonic、Genome等,分別存在配置使用復雜、靈活性差以及開發價格成本昂貴的缺點。
筆者曾經有過使用 Delphi開發 MIS的經驗,對使用Delphi下使用Data Controls組件開發數據庫管理信息系統的靈活和便捷深有體會。針對以上問題,筆者認為采用類似于Delphi下數據庫控件技術實現ORM持久層不失為一種快捷而且靈活的方案。本文從對數據庫管理信息系統的數據訪問層一般實現方法的總結和分析出發,介紹和討論了ORM技術的原理、實現方法和技術優勢。在以上理論研究的基礎上,本文從用戶需求出發,使用組件技術和可擴展接口技術,設計實現了一個.NET平臺下的基于ORM技術的跨數據庫的數據訪問中間件。該中間件以自定義數據庫控件接口標準為基礎,通過ORM技術屏蔽不同數據庫和數據對象間的差異,提供一個通用的數據訪問層中間件,實現對用戶UI數據與數據庫關系數據的自動映射,最大程度的縮減代碼編制人員編寫數據訪問層的代碼數量,有效的提高管理信息系統開發過程中的代碼編制效率。
對象關系映射(Object Relational Mapping,ORM)是通過使用描述對象和數據庫之間映射的元數據,將數據庫應用中的對象自動持久化到關系數據庫中。本質上就是將數據從一種形式轉換到另外一種形式。
ORM技術是跟隨著面向對象的軟件開發方法發展而產生的。面向對象的開發方法是當前企業級應用開發環境中的主流開發方法[2]。關系數據庫是企業級應用環境中永久存放數據的主流數據存儲系統[3]。對象和關系數據是業務實體的兩種抽象表現形式,業務實體在內存中表現為對象,在數據庫中表現為關系數據。內存中的對象之間存在關聯和繼承關系,而在關系數據庫中,關系數據無法直接表達多對多關聯和繼承關系。因此,對象-關系映射(ORM)中間件主要用于實現對象到關系數據庫關系數據的映射。
實際應用中,我們通過ORM中間件在關系型數據庫和業務實體對象之間作一個映射,通過中間件屏蔽不同數據庫的差異,這樣我們在具體編寫應用邏輯的時候,就不需要再去編寫復雜的SQL語句,只要通過操作ORM中間件就可以實現對象到關系的持久化任務。從而大大降低對開發人員數據庫開發技術掌握水平的要求,提高開發效率。
中間件(Middleware)是基礎軟件的一大類,屬于可復用軟件的范疇。顧名思義,中間件處于操作系統軟件與用戶的應用軟件的中間[4]。中間件在操作系統、網絡和數據庫之上,應用軟件的下層,總的作用是為處于自己上層的應用軟件提供運行與開發的環境,幫助用戶靈活、高效地開發和集成復雜的應用軟件。
ORM中間件介于底層數據庫與上層管理信息系統應用之間,以屏蔽不同數據庫之間的差異,支持數據庫管理信息系統的開發、運行時共享,保障數據庫管理信息系統的可靠部署與管理等內容為主要目標。為數據庫管理信息系統提供了快速構建的架構支撐的工具與手段,對于數據庫管理信息系統的規范化和標準化具備凝煉作用。中間件結構示意圖如圖1所示。

圖1 中間件功能示意圖Fig.1 Middleware function diagram
.Net是微軟的新一代技術平臺,為敏捷商務構建互聯互通的應用系統,這些系統是基于標準的,聯通的,適應變化的,穩定的和高性能的。從技術的角度,一個.NET應用是一個運行于.Net Framework之上的應用程序[5]。
本中間件設計理念全部基于.Net開發平臺,屬于.Net開發技術在數據庫管理信息系統開發方面的應用拓展。本中間件設計理念針對于客戶端/服務器(C/S)和瀏覽器/服務器(B/ S)架構均適用。
文中所述的數據庫控件是指滿足本中間件所規定的標準數據庫接口定義的控件。為充分利用已有的各種控件,本中間件規定了一種標準的數據庫控件接口,現有的各類系統控件以及第三方控件通過實現該接口即可成為數據庫控件,從而保證本中間件的開放性、兼容性和可擴展性。該接口的主要定義如下:
屬性:
1)DBField:控件對應數據到數據庫字段的映射。
2)AllowEmpty:是否允許控件為空。
3)DefalutValue:控件為空時候的默認值。
4)ValueType:控件值類型。
5)Format:控件值格式。
6)Caption:控件代表字段的中文含義。
方法:
1)CheckEmpty:檢查控件是否空值。
2)CheckFormat:檢查控件值格式。
3)GetValue:從控件取值。
4)SetValue:向控件賦值。
5)SetDefaultValue:為控件賦默認值。
事件:
A、TriggerValueChangedEvent:觸發控件值改變事件。
數據庫控件是本中間件的基礎。本中間件通過數據庫控件實現數據庫數據到用戶UI的自動映射,同時自動完成用戶UI控件數據到數據庫的持久化存儲功能,最大化的縮減數據訪問層的代碼編寫量。這里筆者只針對數據庫持久化的過程中的一對一模型接口設計做出了說明。一對多模型接口設計類似,在此筆者不再縟述。
5.1ORM中間件的設計目標
ORM中間件的主要目的是提供一個獨立的、可復用的數據持久化解決方案[6]。數據庫管理信息系統編碼人員利用這個中間件通過簡單配置和屬性設定就可以完成用戶UI數據到數據庫的持久化工作,而基本不需要了解底層數據庫的的任何細節。在降低對開發人員技能掌握要求的同時,使開發人員從傳統數據訪問層代碼編寫過程中繁瑣的、機械的工作中解脫出來,致力于系統邏輯和用戶UI設計,在提高軟件開發效率的同時,能夠為用戶帶來更好的用戶體驗。
5.2ORM中間件功能需求
O/R Maping中間件主要功能特點如下:
1)中間件應忽略不同數據庫間的差異,通過定義標準數據庫訪問接口來提供對不同數據庫的擴展支持。
2)中間件應能夠根據目標數據庫準確的生成標準的增刪改sql語句,省去開發人員代碼重復編寫的麻煩。
3)開發人員通過簡單的定義即可完成數據庫關系數據到用戶界面的映射和采集工作,從而使程序員專注于業務邏輯處理。
4)支持單表、一對一以及一對多表間的數據處理工作,同時支持數據庫事務處理,保證不同表數據間的完整性。
5)提供豐富的事件處理接口,便于開發人員應對變化多樣的客戶端開發要求。
6)以組件、類的多態性和繼承性保證中間件的可擴展性和可伸縮性。
5.3ORM中間件結構設計
整個中間件由數據庫訪問層(Data Access Layer)、持久層(Persistent Layer)和由數據庫控件組成的UI設計層組成。如圖2所示。
其中數據訪問層主要類和接口設計如下:
DatabaseFactory類:數據庫工廠類,其主要作用是根據目標數據庫的不同產生不同的數據庫訪問類。
ISqlMaker接口:主要實現自動編寫目標數據庫的增刪改Sql語句。
DbOperator類:調用ISqlMaker結果實現對具體數據表的增刪改操作。

圖2 中間件結構設計示意圖Fig.2 Middleware design schematic
SortedListRow類:Dictionary類數據結構,類似于數據表的行對象,數據表對象以行對象集合SortedListRowCollection的形式展現。
持久層主要類和接口設計如下:
IDBControl接口:數據庫控件接口定義標準。
IDBControlsContainer接口:數據庫控件容器接口,該接口負責在數據訪問層和UI層之間傳輸數據。
DbTransactionController類:事務處理類,負責多個數據庫容器間數據持久化的事務統一性處理工作。
InputHelper類:UI數據有效性檢查及數據收集類,主要負責向用戶界面的數據控件收集數據以及賦值。
UI層主要包括各種實現了數據庫接口定義的系統控件、第三方控件以及自定義控件。
5.4ORM中間件主要類工作流程說明
中間件主要類工作流程如圖3所示。

圖3 中間件工作流程示意圖Fig.3 Middleware work flow diagram
如3圖中所示IDBControlsContainer容器接口類調用Input Helper類從符合IDBControl接口的數據庫控件獲取用戶數據,同時進行數據有效性驗證,同時調用 DbTransaction Controller類將用戶數據封裝成為行數據對象SortedListRow及表數據對象 SortedListRowCollection。DbOperator類接收SortedListRow及 SortedListRowCollection類型對象,調用DatabaseFactory類創建目標數據庫對象,進而調用ISqlMaker接口對象自動構造相應數據持久化SQL語句,從而完成用戶UI數據到目標數據庫的持久化工作。反之,則可完成持久化數據到用戶UI界面的自動映射工作。
從上述類工作流程中我們可以看到,在UI設計人員完成用戶界面設計并設置相應控件屬性之后,中間件就可以自動完成用戶數據向底層數據庫的持久化工作,大量減少了代碼編寫人員的代碼編寫任務,避免了重復而且機械性的工作,對提高工作效率,減少程序編制Bug有著重要意義。
數據庫管理信息系統是目前各類企事業單位實現信息化的主要手段,如何提高管理信息系統的開發效率,有效解決傳統數據庫管理信息系統編制過程中編碼工作重復、編碼質量不一、代碼可移植性差、可重用性低、難以維護等問題,對于提高社會生產力有著重要意義。
文中從上述問題出發,根據本人多年的.Net平臺管理信息系統的開發經驗,提出了一種全新的.Net平臺下基于數據庫控件的ORM中間件模式。該中間件已在我單位完成編制工作,并通過我單位在新疆維吾爾自治區實施的多個項目的應用和實踐之后,取得了較為良好的使用效果。使用該中間件后,可以減少一般性管理信息系統數據訪問層80%以上的代碼編寫任務,極大的提高了我單位的工作效率并帶來了良好的經濟效益,極大地提高了我公司在新疆軟件行業的行業競爭力。
[1]史益芳,王志平.管理信息系統(2013版)[M].北京:人民郵電出版社,2013.
[2]Timothy A.Budd.面向對象編程導論[M].北京:機械工業出版社,2003.
[3]薩師煊,王珊.數據庫系統概論(第四版)[M].北京:高等教育出版社,2006.
[4]李文菲.基于中間件技術的數據交換平臺的設計與實現[D].北京:中國科學院.2006
[5]李律松.VisualC#數據庫高級教程[M].北京:清華大學出版社,2005.
[6]韓萬江.軟件工程案例教程[M].北京:機械工業出版社,2007.
Design and implementation of the.Net ORM Middleware based on database control
GUO Ya-ping,MA Xin-chun,ZHANG Li
(Xinjiang electronic institute Co.,LTD,Urumqi 830049,China)
This article describes how to achieve a brand new middleware of data persistence layer under the.Net environment through custom database access controls and object relational mapping technology.The middleware can map database tables with UI controls automatically,reducing database development requirement of the developers,and greatly Improve development efficiency,allows developers and users committed to the buiness logic and UI designment for better user experience.Through our several management information systems in Xinjiang Uygur Autonomous Region,The middleware has verified its quickness,stability and scalability.It can make software development more effectively.
.Net;database access control;ORM;middleware;MIS
TN02
A
1674-6236(2016)03-0029-03
2015-03-19稿件編號:201503253
郭亞平(1978—),男,新疆阿克蘇人,工程師。研究方向:架構設計。