郭亞平,馬新春,張 麗
(新疆電子研究所有限公司 新疆 烏魯木齊 830049)
.Net下基于數(shù)據(jù)庫組件的ORM中間件的設(shè)計與實現(xiàn)
郭亞平,馬新春,張 麗
(新疆電子研究所有限公司 新疆 烏魯木齊830049)
文中介紹.Net開發(fā)環(huán)境下,通過自定義數(shù)據(jù)庫訪問控件和對象關(guān)系映射技術(shù)(Object Relational Mapping,簡稱ORM)實現(xiàn)的一種全新的數(shù)據(jù)持久層中間件。該中間件實現(xiàn)數(shù)據(jù)庫表對象到用戶UI控件的自動映射,在降低對開發(fā)人員數(shù)據(jù)庫開發(fā)技術(shù)掌握水平要求的同時,大大提高開發(fā)效率,使開發(fā)人員可以致力于后臺邏輯與用戶UI設(shè)計,為用戶帶來更好的體驗。本中間件通過我公司在新疆維吾爾自治區(qū)開發(fā)的多個管理信息系統(tǒng)(MIS)的應(yīng)用與實踐,已經(jīng)驗證了其快捷性、穩(wěn)定性和可伸縮性,能夠有效的提高軟件開發(fā)效率。
.Net;數(shù)據(jù)庫控件;對象關(guān)系映射;中間件;管理信息系統(tǒng)
管理信息系統(tǒng) (Management Information System,MIS)是一個以人為主導(dǎo),利用計算機硬件、軟件、網(wǎng)絡(luò)通信設(shè)備以及其他辦公設(shè)備,進行信息的收集、傳輸、加工、儲存、更新、拓展和維護的系統(tǒng)[1]。是當前企事業(yè)以及政府信息化的一種主流的系統(tǒng)軟件模式。在管理信息系統(tǒng)中,通過數(shù)據(jù)訪問層操作數(shù)據(jù)庫實現(xiàn)對信息的存儲訪問是其最基本而且必不可少的組成部分。用傳統(tǒng)的方法開發(fā)數(shù)據(jù)訪問層,存在編碼工作重復(fù)、編碼質(zhì)量不一、代碼可移植性差、可重用性低、難以維護等問題。對象關(guān)系映射(Object Relational Mapping,ORM)是通過使用描述對象和數(shù)據(jù)庫之間映射的元數(shù)據(jù),將應(yīng)用中的對象自動持久化到關(guān)系數(shù)據(jù)庫中,從而可以有效解決上述傳統(tǒng)數(shù)據(jù)訪問層存在的問題。目前已有的.Net下的幾種ORM中間件解決方案,如Nhibernate、Subsonic、Genome等,分別存在配置使用復(fù)雜、靈活性差以及開發(fā)價格成本昂貴的缺點。
筆者曾經(jīng)有過使用 Delphi開發(fā) MIS的經(jīng)驗,對使用Delphi下使用Data Controls組件開發(fā)數(shù)據(jù)庫管理信息系統(tǒng)的靈活和便捷深有體會。針對以上問題,筆者認為采用類似于Delphi下數(shù)據(jù)庫控件技術(shù)實現(xiàn)ORM持久層不失為一種快捷而且靈活的方案。本文從對數(shù)據(jù)庫管理信息系統(tǒng)的數(shù)據(jù)訪問層一般實現(xiàn)方法的總結(jié)和分析出發(fā),介紹和討論了ORM技術(shù)的原理、實現(xiàn)方法和技術(shù)優(yōu)勢。在以上理論研究的基礎(chǔ)上,本文從用戶需求出發(fā),使用組件技術(shù)和可擴展接口技術(shù),設(shè)計實現(xiàn)了一個.NET平臺下的基于ORM技術(shù)的跨數(shù)據(jù)庫的數(shù)據(jù)訪問中間件。該中間件以自定義數(shù)據(jù)庫控件接口標準為基礎(chǔ),通過ORM技術(shù)屏蔽不同數(shù)據(jù)庫和數(shù)據(jù)對象間的差異,提供一個通用的數(shù)據(jù)訪問層中間件,實現(xiàn)對用戶UI數(shù)據(jù)與數(shù)據(jù)庫關(guān)系數(shù)據(jù)的自動映射,最大程度的縮減代碼編制人員編寫數(shù)據(jù)訪問層的代碼數(shù)量,有效的提高管理信息系統(tǒng)開發(fā)過程中的代碼編制效率。
對象關(guān)系映射(Object Relational Mapping,ORM)是通過使用描述對象和數(shù)據(jù)庫之間映射的元數(shù)據(jù),將數(shù)據(jù)庫應(yīng)用中的對象自動持久化到關(guān)系數(shù)據(jù)庫中。本質(zhì)上就是將數(shù)據(jù)從一種形式轉(zhuǎn)換到另外一種形式。
ORM技術(shù)是跟隨著面向?qū)ο蟮能浖_發(fā)方法發(fā)展而產(chǎn)生的。面向?qū)ο蟮拈_發(fā)方法是當前企業(yè)級應(yīng)用開發(fā)環(huán)境中的主流開發(fā)方法[2]。關(guān)系數(shù)據(jù)庫是企業(yè)級應(yīng)用環(huán)境中永久存放數(shù)據(jù)的主流數(shù)據(jù)存儲系統(tǒng)[3]。對象和關(guān)系數(shù)據(jù)是業(yè)務(wù)實體的兩種抽象表現(xiàn)形式,業(yè)務(wù)實體在內(nèi)存中表現(xiàn)為對象,在數(shù)據(jù)庫中表現(xiàn)為關(guān)系數(shù)據(jù)。內(nèi)存中的對象之間存在關(guān)聯(lián)和繼承關(guān)系,而在關(guān)系數(shù)據(jù)庫中,關(guān)系數(shù)據(jù)無法直接表達多對多關(guān)聯(lián)和繼承關(guān)系。因此,對象-關(guān)系映射(ORM)中間件主要用于實現(xiàn)對象到關(guān)系數(shù)據(jù)庫關(guān)系數(shù)據(jù)的映射。
實際應(yīng)用中,我們通過ORM中間件在關(guān)系型數(shù)據(jù)庫和業(yè)務(wù)實體對象之間作一個映射,通過中間件屏蔽不同數(shù)據(jù)庫的差異,這樣我們在具體編寫應(yīng)用邏輯的時候,就不需要再去編寫復(fù)雜的SQL語句,只要通過操作ORM中間件就可以實現(xiàn)對象到關(guān)系的持久化任務(wù)。從而大大降低對開發(fā)人員數(shù)據(jù)庫開發(fā)技術(shù)掌握水平的要求,提高開發(fā)效率。
中間件(Middleware)是基礎(chǔ)軟件的一大類,屬于可復(fù)用軟件的范疇。顧名思義,中間件處于操作系統(tǒng)軟件與用戶的應(yīng)用軟件的中間[4]。中間件在操作系統(tǒng)、網(wǎng)絡(luò)和數(shù)據(jù)庫之上,應(yīng)用軟件的下層,總的作用是為處于自己上層的應(yīng)用軟件提供運行與開發(fā)的環(huán)境,幫助用戶靈活、高效地開發(fā)和集成復(fù)雜的應(yīng)用軟件。
ORM中間件介于底層數(shù)據(jù)庫與上層管理信息系統(tǒng)應(yīng)用之間,以屏蔽不同數(shù)據(jù)庫之間的差異,支持數(shù)據(jù)庫管理信息系統(tǒng)的開發(fā)、運行時共享,保障數(shù)據(jù)庫管理信息系統(tǒng)的可靠部署與管理等內(nèi)容為主要目標。為數(shù)據(jù)庫管理信息系統(tǒng)提供了快速構(gòu)建的架構(gòu)支撐的工具與手段,對于數(shù)據(jù)庫管理信息系統(tǒng)的規(guī)范化和標準化具備凝煉作用。中間件結(jié)構(gòu)示意圖如圖1所示。
圖1 中間件功能示意圖Fig.1 Middleware function diagram
.Net是微軟的新一代技術(shù)平臺,為敏捷商務(wù)構(gòu)建互聯(lián)互通的應(yīng)用系統(tǒng),這些系統(tǒng)是基于標準的,聯(lián)通的,適應(yīng)變化的,穩(wěn)定的和高性能的。從技術(shù)的角度,一個.NET應(yīng)用是一個運行于.Net Framework之上的應(yīng)用程序[5]。
本中間件設(shè)計理念全部基于.Net開發(fā)平臺,屬于.Net開發(fā)技術(shù)在數(shù)據(jù)庫管理信息系統(tǒng)開發(fā)方面的應(yīng)用拓展。本中間件設(shè)計理念針對于客戶端/服務(wù)器(C/S)和瀏覽器/服務(wù)器(B/ S)架構(gòu)均適用。
文中所述的數(shù)據(jù)庫控件是指滿足本中間件所規(guī)定的標準數(shù)據(jù)庫接口定義的控件。為充分利用已有的各種控件,本中間件規(guī)定了一種標準的數(shù)據(jù)庫控件接口,現(xiàn)有的各類系統(tǒng)控件以及第三方控件通過實現(xiàn)該接口即可成為數(shù)據(jù)庫控件,從而保證本中間件的開放性、兼容性和可擴展性。該接口的主要定義如下:
屬性:
1)DBField:控件對應(yīng)數(shù)據(jù)到數(shù)據(jù)庫字段的映射。
2)AllowEmpty:是否允許控件為空。
3)DefalutValue:控件為空時候的默認值。
4)ValueType:控件值類型。
5)Format:控件值格式。
6)Caption:控件代表字段的中文含義。
方法:
1)CheckEmpty:檢查控件是否空值。
2)CheckFormat:檢查控件值格式。
3)GetValue:從控件取值。
4)SetValue:向控件賦值。
5)SetDefaultValue:為控件賦默認值。
事件:
A、TriggerValueChangedEvent:觸發(fā)控件值改變事件。
數(shù)據(jù)庫控件是本中間件的基礎(chǔ)。本中間件通過數(shù)據(jù)庫控件實現(xiàn)數(shù)據(jù)庫數(shù)據(jù)到用戶UI的自動映射,同時自動完成用戶UI控件數(shù)據(jù)到數(shù)據(jù)庫的持久化存儲功能,最大化的縮減數(shù)據(jù)訪問層的代碼編寫量。這里筆者只針對數(shù)據(jù)庫持久化的過程中的一對一模型接口設(shè)計做出了說明。一對多模型接口設(shè)計類似,在此筆者不再縟述。
5.1ORM中間件的設(shè)計目標
ORM中間件的主要目的是提供一個獨立的、可復(fù)用的數(shù)據(jù)持久化解決方案[6]。數(shù)據(jù)庫管理信息系統(tǒng)編碼人員利用這個中間件通過簡單配置和屬性設(shè)定就可以完成用戶UI數(shù)據(jù)到數(shù)據(jù)庫的持久化工作,而基本不需要了解底層數(shù)據(jù)庫的的任何細節(jié)。在降低對開發(fā)人員技能掌握要求的同時,使開發(fā)人員從傳統(tǒng)數(shù)據(jù)訪問層代碼編寫過程中繁瑣的、機械的工作中解脫出來,致力于系統(tǒng)邏輯和用戶UI設(shè)計,在提高軟件開發(fā)效率的同時,能夠為用戶帶來更好的用戶體驗。
5.2ORM中間件功能需求
O/R Maping中間件主要功能特點如下:
1)中間件應(yīng)忽略不同數(shù)據(jù)庫間的差異,通過定義標準數(shù)據(jù)庫訪問接口來提供對不同數(shù)據(jù)庫的擴展支持。
2)中間件應(yīng)能夠根據(jù)目標數(shù)據(jù)庫準確的生成標準的增刪改sql語句,省去開發(fā)人員代碼重復(fù)編寫的麻煩。
3)開發(fā)人員通過簡單的定義即可完成數(shù)據(jù)庫關(guān)系數(shù)據(jù)到用戶界面的映射和采集工作,從而使程序員專注于業(yè)務(wù)邏輯處理。
4)支持單表、一對一以及一對多表間的數(shù)據(jù)處理工作,同時支持數(shù)據(jù)庫事務(wù)處理,保證不同表數(shù)據(jù)間的完整性。
5)提供豐富的事件處理接口,便于開發(fā)人員應(yīng)對變化多樣的客戶端開發(fā)要求。
6)以組件、類的多態(tài)性和繼承性保證中間件的可擴展性和可伸縮性。
5.3ORM中間件結(jié)構(gòu)設(shè)計
整個中間件由數(shù)據(jù)庫訪問層(Data Access Layer)、持久層(Persistent Layer)和由數(shù)據(jù)庫控件組成的UI設(shè)計層組成。如圖2所示。
其中數(shù)據(jù)訪問層主要類和接口設(shè)計如下:
DatabaseFactory類:數(shù)據(jù)庫工廠類,其主要作用是根據(jù)目標數(shù)據(jù)庫的不同產(chǎn)生不同的數(shù)據(jù)庫訪問類。
ISqlMaker接口:主要實現(xiàn)自動編寫目標數(shù)據(jù)庫的增刪改Sql語句。
DbOperator類:調(diào)用ISqlMaker結(jié)果實現(xiàn)對具體數(shù)據(jù)表的增刪改操作。
圖2 中間件結(jié)構(gòu)設(shè)計示意圖Fig.2 Middleware design schematic
SortedListRow類:Dictionary類數(shù)據(jù)結(jié)構(gòu),類似于數(shù)據(jù)表的行對象,數(shù)據(jù)表對象以行對象集合SortedListRowCollection的形式展現(xiàn)。
持久層主要類和接口設(shè)計如下:
IDBControl接口:數(shù)據(jù)庫控件接口定義標準。
IDBControlsContainer接口:數(shù)據(jù)庫控件容器接口,該接口負責(zé)在數(shù)據(jù)訪問層和UI層之間傳輸數(shù)據(jù)。
DbTransactionController類:事務(wù)處理類,負責(zé)多個數(shù)據(jù)庫容器間數(shù)據(jù)持久化的事務(wù)統(tǒng)一性處理工作。
InputHelper類:UI數(shù)據(jù)有效性檢查及數(shù)據(jù)收集類,主要負責(zé)向用戶界面的數(shù)據(jù)控件收集數(shù)據(jù)以及賦值。
UI層主要包括各種實現(xiàn)了數(shù)據(jù)庫接口定義的系統(tǒng)控件、第三方控件以及自定義控件。
5.4ORM中間件主要類工作流程說明
中間件主要類工作流程如圖3所示。
圖3 中間件工作流程示意圖Fig.3 Middleware work flow diagram
如3圖中所示IDBControlsContainer容器接口類調(diào)用Input Helper類從符合IDBControl接口的數(shù)據(jù)庫控件獲取用戶數(shù)據(jù),同時進行數(shù)據(jù)有效性驗證,同時調(diào)用 DbTransaction Controller類將用戶數(shù)據(jù)封裝成為行數(shù)據(jù)對象SortedListRow及表數(shù)據(jù)對象 SortedListRowCollection。DbOperator類接收SortedListRow及 SortedListRowCollection類型對象,調(diào)用DatabaseFactory類創(chuàng)建目標數(shù)據(jù)庫對象,進而調(diào)用ISqlMaker接口對象自動構(gòu)造相應(yīng)數(shù)據(jù)持久化SQL語句,從而完成用戶UI數(shù)據(jù)到目標數(shù)據(jù)庫的持久化工作。反之,則可完成持久化數(shù)據(jù)到用戶UI界面的自動映射工作。
從上述類工作流程中我們可以看到,在UI設(shè)計人員完成用戶界面設(shè)計并設(shè)置相應(yīng)控件屬性之后,中間件就可以自動完成用戶數(shù)據(jù)向底層數(shù)據(jù)庫的持久化工作,大量減少了代碼編寫人員的代碼編寫任務(wù),避免了重復(fù)而且機械性的工作,對提高工作效率,減少程序編制Bug有著重要意義。
數(shù)據(jù)庫管理信息系統(tǒng)是目前各類企事業(yè)單位實現(xiàn)信息化的主要手段,如何提高管理信息系統(tǒng)的開發(fā)效率,有效解決傳統(tǒng)數(shù)據(jù)庫管理信息系統(tǒng)編制過程中編碼工作重復(fù)、編碼質(zhì)量不一、代碼可移植性差、可重用性低、難以維護等問題,對于提高社會生產(chǎn)力有著重要意義。
文中從上述問題出發(fā),根據(jù)本人多年的.Net平臺管理信息系統(tǒng)的開發(fā)經(jīng)驗,提出了一種全新的.Net平臺下基于數(shù)據(jù)庫控件的ORM中間件模式。該中間件已在我單位完成編制工作,并通過我單位在新疆維吾爾自治區(qū)實施的多個項目的應(yīng)用和實踐之后,取得了較為良好的使用效果。使用該中間件后,可以減少一般性管理信息系統(tǒng)數(shù)據(jù)訪問層80%以上的代碼編寫任務(wù),極大的提高了我單位的工作效率并帶來了良好的經(jīng)濟效益,極大地提高了我公司在新疆軟件行業(yè)的行業(yè)競爭力。
[1]史益芳,王志平.管理信息系統(tǒng)(2013版)[M].北京:人民郵電出版社,2013.
[2]Timothy A.Budd.面向?qū)ο缶幊虒?dǎo)論[M].北京:機械工業(yè)出版社,2003.
[3]薩師煊,王珊.數(shù)據(jù)庫系統(tǒng)概論(第四版)[M].北京:高等教育出版社,2006.
[4]李文菲.基于中間件技術(shù)的數(shù)據(jù)交換平臺的設(shè)計與實現(xiàn)[D].北京:中國科學(xué)院.2006
[5]李律松.VisualC#數(shù)據(jù)庫高級教程[M].北京:清華大學(xué)出版社,2005.
[6]韓萬江.軟件工程案例教程[M].北京:機械工業(yè)出版社,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—),男,新疆阿克蘇人,工程師。研究方向:架構(gòu)設(shè)計。