999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

AORM持久層框架的設計與實現

2016-01-27 06:24:07

李 春 梅

(安徽新華學院 信息工程學院,安徽 合肥 230088)

?

AORM持久層框架的設計與實現

李 春 梅

(安徽新華學院 信息工程學院,安徽 合肥 230088)

摘要:針對傳統ORM(object-relational mapping)框架使用成本高、執行效率難以控制等缺點,結合軟件開發過程中的實際要求,提出了AORM(adaptive object-relational mapping)持久層框架的設計方案。該方案以C#的反射機制為基礎,綜合考慮軟件實際開發過程中的具體要求,結合多種數據庫類型的語法特點,建立了以XML關系映射文件與自適應關系映射相結合的AORM持久層框架。與傳統ORM框架相比,其最大的特點是將SQL語句獨立于應用程序,非常有利于數據庫結構的調整和優化。

關鍵詞:AORM;ORM;對象關系映射;多種數據庫類型;數據持久化

ORM系統作為中間件,將關系數據庫中的數據以及數據關系轉換成對象以及對象之間的關系[1],用于解決關系數據庫與對象之間存在的互不匹配的現象[2]。就目前市面上常見的ORM框架來說,基本上都是提前建立數據表與實體類對象及其屬性之間的映射關系[3],一方發生變化則另一方必須進行相應的變化,而且實體類庫的變化則會導致整個系統的代碼均需要做出修改[4],一變則全變,限制了系統的靈活性。AORM的中心思想是使數據庫"適應"實體類庫,而不是使實體類庫依賴數據庫結構。從而使得開發人員可以嚴格的按照對象模型以及狀態機去編寫軟件,而無需考慮數據的存儲格式以及存儲方式, AORM則承擔起對象模型(實體類)與持久化數據之間的轉換,大大提高了系統的靈活性以及適用性。以下具體給出了AORM持久層框架的詳細設計與實現過程。

1映射生成器的設計與實現

映射生成器負責管理數據結果集與實體類之間的映射關系[5],并且將映射關系以XML文件為載體存儲在物理磁盤中,以便隨時調用。映射關系可事先定義好,也可以在實體類首次被實例化時自動的創建其映射關系,并生成相應的XML文件進行存儲[6],即實現自動化映射,降低了開發人員的學習難度。映射生成器操作類如圖1所示。LoadMapping方法根據給定的映射文件存放路徑以及實體類類型獲取實體類的映射關系,BuildMapping方法則通過C#的反射機制,獲取該實體類的可讀寫屬性信息(包括繼承的屬性信息)[7],并與給定的數據列相互對照,提取二者匹配信息并生成映射關系文件(僅生成映射文件中的Properties小節的內容)。

映射關系映射文件結構如下所示:

〈entity-mapping〉

〈class fulltypename="*" version="*" tablename=""〉

〈properties〉

〈property name="*" field-name="*" primarykey="true" readonly="true"/〉

〈property name="*" field-name="*"/〉

〈/properties〉

〈operations〉

〈operation name="" sqltype="0" sql="" returned="" 〉

〈params〉〈param name="" type="" propertyname="" isnullable=""/〉〈/params〉

〈results〉〈result Index="0" propertyname="*" /〉〈/results 〉

〈/operation〉

〈/operations〉

〈/class〉

〈/entity-mapping〉

圖1AORM映射關系生成器

其中class小節中的fulltypename標識實體類的全名稱,tablename標識實對應的表/視圖,version標識映射文件的版本,其余小節定義如下:

1) Properties小節:定義實體類的值類型屬性以及繼承自BaseEntity類的引用類型屬性與數據列之間的對照關系。其中name對應實體類的屬性,fieldname對應數據列的名稱,primarykey標識當前的數據列是否為主鍵列,readonly標識是否為只讀屬性。實體類屬性與數據列之間的數據類型轉換是自動進行的(要求二者之間能夠進行轉換)。

2) Operations小節:定義實體類的擴展方法(除CURD之外的數據操作方法)。CRUD(creat/add, read, update, delete)操作為實體類的默認操作[8],Operations中定義的是更復雜的操作:如多表更新、查詢以及使用存儲過程的操作等,支持單數據集以及多數據集的數據填充。其中name標識操作的名稱,具備唯一性。Param小節中的name對應sql中的參數名稱或占位標識符,propertyname則表示若未給定參數時對應實體類的屬性名。Result小節僅在返回多結果集時使用,index為返回的記錄集順序,propertyname為對應的實體類屬性名。

2對象存取器的設計與實現

對象存取器負責實體類與數據庫的交互任務,包括數據的存儲以及讀取(見圖2)[9]。故此,AORM中的實體類也是有著一定的限制和要求:

1) 實體類必須繼承自基類BaseEntity,可對應于數據庫中的數據表、視圖以及通過SQL語句或存儲過程等方式所取得的數據集;

2) 實體類的屬性的類型可以是實體類類型。

3) 實體類的屬性的類型可以是集合類型(Array,List或Dictionary類型等),但是其基類型必須繼承自BaseEntity的實體類類型。

對象的數據存取主要通過基類BaseEntity實現,并且所有的操作都有著共同的操作步驟:

1) 獲取操作適配器名稱。一般有3種途徑:參數進行指定、類實例通過屬性DataProviderName進行設置以及在實體類定義中通過類的特性進行設定。

2) 獲取關系映射信息。根據已經取得的適配器名稱取得適配器配置信息(DataProviderConfiguration),然后根據傳入的泛型或當前實體類類型以及映射文件存放基礎路徑(TemplatePath)調用映射管理器中的LoadMapping方法獲取映射關系信息。若映射文件不存在,并且預先設定了tablename,則會自動從數據庫中獲取數據列信息,調用BuildMapping方法生成關系映射文件。

圖2AORM對象存取器

3) 取得結果:將已經取得的適配器配置信息作為參數調用數據庫適配器工廠類(DatabaseProviderFactory,見圖3)的GetDatabaseProvider方法獲取具體的適配器(實現了IDatabaseProvider接口并操作具體種類數據庫的適配器,如圖3中的MSSQLDatabaseProvider、MySQLDatabaseProvider、OracleDatabaseProvider等),然后根據映射文件中的操作定義調用CreateCommand方法生成具體的Command,之后再根據具體的操作要求調用不同的方法取得相應的返回結果。

4) 實體類數據填充:根據已取得的數據結果以及實體類屬性關系映射信息,利用C#的反射機制進行數據填充,然后將填充后的對象返回。

數據操作分為基本操作以及擴展操作2大類[10]。其中基本操作包括Add,Save(含一個重載函數),Delete(含一個重載函數)共5個操作,擴展操作包括GetData,GetList以及Execute共3個操作,所有操作中的object類型參數均為匿名類型,格式為鍵值對,用于指定參數名稱以及相應的值。

3數據庫適配器的設計與實現

數據庫適配器的主要目的是實現實體類以及實體類的數據操作,與具體的數據庫及數據庫類型分離,使得實體類以及與實體類的相關操作具備數據庫無關性以及數據庫類型無關性[11],并且將所有與數據庫直接交互的操作均放到映射文件中進行定義,避免在代碼中出現SQL語句,提高用戶系統的可維護性以及適用性等。事務的支持也是數據庫適配器所必須具備的[12]。

如圖3所示,數據庫適配器通過一個適配器操作接口IDatabaseProvider以及一個適配器配置信息DataProviderConfiguration實現了多數據庫的支持,同時也提供了一個數據庫事務支持對象DatabaseTransaction用于數據庫事務操作。不同的數據庫適配器均實現了IDatabaseProvider接口,用戶可以根據給定的操作條件執行數據庫操作,使得用戶可以無視具體的數據庫種類,將具體的細節完全交與適配器進行完成。同時,適配器也提供了直接執行SQL語句的操作,使得適配器可以脫離AORM單獨進行使用。

數據庫適配器的接口函數CreateCommand用于生成符合數據庫自身規則的SQL命令對象,有效地解決了多類型數據庫的支持要求。

圖3數據庫適配器

4結束語

針對現行ORM軟件的諸多缺點,從如何提高軟件的開發效率、降低軟件的復雜程度等方面作為出發點,以C#為開發環境,設計了一個基于XML配置的、可自動建立數據庫與實體類映射關系的、支持多種數據庫類型的AORM持久型框架。目前,AORM持久層框架已成功應用于美國某大型法律法規網站系統,一個站點同時提供了20多個州的法律法規站點服務(每個州均有一個后臺數據庫,結構不盡相同),就系統開發人員反饋以及目前網站的運行情況來說,達到了預期的要求和目標。

參考文獻:

[1] 張小鵯. 面向對象分析方法的綜述[J]. 甘肅科技, 2010 (2): 44-47.

[2] 王永誠, 蘇逸倫. 深入淺出談ORM [J]. 中華技術, 2010 (88): 108-115.

[3] Mata-Toledo R, Monger M. Utilizing the ADO. NET entity framework in database courses[J]. Journal of Computing Sciences in Colleges, 2011, 26(3): 93-97.

[4] 盧小垂. 基于. Net 平臺的 ORM 輕量級開發框架的設計與實現[J]. 電信快報: 網絡與通信, 2012 (10): 10-16.

[5] 李杰. 基于 ORM 的輕量級數據持久化技術研究及應用[J]. 計算機科學, 2010, 37(9): 190-193.

[6] Zhang Z Y, Chang S G, Ding T F. Research on the Dynamic Integrating with Heterogeneous Database System Based XML and Hibernate[J]. Applied Mechanics and Materials, 2013(263): 1717-1720.

[7] Pop D P. Designing An Object Relation Mapping System In Php[J]. Journal of Information Systems & Operations Management, 2011, 5(1): 207-212.

[8] 梁伍七. Hibernate 中關聯關系映射策略研究與實現[J]. 安徽廣播電視大學學報, 2012 (3): 117-120.

[9] 譚瑩宇. 基于 Hibernate JPA 和 JQuery 框架的數據查詢研究與實現[J].計算機與現代化, 2012 (1): 196-198.

[10] Troelsen A. Type Reflection, Late Binding, and Attribute-Based Programming[M].Pro C# 5.0 and the. NET 4.5 Framework. Apress, 2012: 555-598.

[11] 張美玲. 增量預取技術在持久化框架中的研究與應用[D]. 青島:中國海洋大學, 2010.

[12] Cain III H W, Dillenberger D N, Hack M H T, et al. Database system transaction management: U.S. Patent Application 13/435,281[P]. 2012-3-30.

Design and Implementation of AORM Persistence Layer Framework

LI Chun-mei

(School of Information Engineering, Anhui Xinhua University, Hefei 230088, China)

Abstract:Aiming at the disadvantages of traditional ORM(object-relational mapping) framework such as high cost and difficult to control, combined with the actual process of software development requirements, a AORM (adaptive object-relational mapping) persistence framework was proposed. This framework is based on the reflection mechanism in C#, considering the specific requirements at actual software development process, combined with the grammatical features of multiple database types, established the persistence framework, which integrates the XML-relation mapping files and auto-relational mapping method. Compared with the traditional ORM framework, the application-independent SQL statements is the biggest feature, and very beneficial to adjust and optimize the database structure.

Key words:AORM, ORM, object-relational mapping, multiple database types, data persistence

中圖分類號:TP319

文獻標識碼:A

文章編號:1007-4260(2015)01-0071-05

DOI:10.13757/j.cnki.cn34-1150/n.2015.01.020

作者簡介:李春梅, 女, 安徽滁州人, 碩士,安徽新華學院信息工程學院講師,主要研究方向為計算機軟件技術。

收稿日期:2014-07-09

主站蜘蛛池模板: av色爱 天堂网| 韩日午夜在线资源一区二区| 久久五月视频| 免费人成黄页在线观看国产| 在线观看免费国产| 日本三级欧美三级| 秋霞午夜国产精品成人片| 免费全部高H视频无码无遮掩| 试看120秒男女啪啪免费| 亚洲αv毛片| 午夜无码一区二区三区| 黄色网站不卡无码| 国产成人亚洲欧美激情| 日韩性网站| 国模视频一区二区| 国内a级毛片| 亚洲第一色视频| 亚洲欧美日本国产综合在线 | 无码专区在线观看| 欧美一区二区自偷自拍视频| 亚洲日韩图片专区第1页| 欧美色丁香| 免费va国产在线观看| 天天摸天天操免费播放小视频| 99999久久久久久亚洲| 欧美精品综合视频一区二区| 婷婷五月在线| 99视频在线观看免费| 青草免费在线观看| 青青青伊人色综合久久| 国产成人91精品| 亚洲天堂视频网站| 国产免费黄| 伦伦影院精品一区| 亚洲天堂首页| 免费无码AV片在线观看中文| 日韩午夜福利在线观看| 亚洲色无码专线精品观看| 免费 国产 无码久久久| 特级精品毛片免费观看| 亚洲va视频| 欧美日韩国产系列在线观看| 免费三A级毛片视频| 91九色国产在线| 中文字幕中文字字幕码一二区| 免费a在线观看播放| 欧美97欧美综合色伦图| 亚洲国内精品自在自线官| 久久无码av三级| 午夜国产小视频| 亚洲男人的天堂久久香蕉网| 亚洲一区二区黄色| 天堂成人av| 国产综合另类小说色区色噜噜| 制服丝袜 91视频| 久久91精品牛牛| 国产精品真实对白精彩久久 | 中文字幕丝袜一区二区| 五月婷婷综合网| 国产女人水多毛片18| 日本影院一区| 99这里精品| 国内精品伊人久久久久7777人| 一级一级一片免费| 夜夜操国产| 99re66精品视频在线观看| 国产91av在线| 扒开粉嫩的小缝隙喷白浆视频| 亚洲V日韩V无码一区二区| 欧美激情第一区| 国产精品欧美亚洲韩国日本不卡| 亚洲视频四区| 亚洲欧洲日韩久久狠狠爱 | 亚洲AV无码乱码在线观看代蜜桃| 亚洲a免费| 米奇精品一区二区三区| 亚洲天堂免费在线视频| 国产在线观看第二页| 欧美国产在线看| www精品久久| 亚洲av无码专区久久蜜芽| 日韩色图区|