標籤:design check 通用 介面 summary 封裝 問題 改變 物件導向編程
對象關係映射(英語:Object Relation Mapping,簡稱ORM,或O/RM,或O/R mapping),是一種程式技術,用於實現物件導向程式設計語言裡不同類型系統的資料之間的轉換。從效果上說,它其實是建立了一個可在程式設計語言裡使用的--“虛擬對象資料庫”。物件導向是從軟體工程基本原則(如耦合、彙總、封裝)的基礎上發展起來的,而關聯式資料庫則是從數學理論發展而來的,兩套理論存在顯著的區別。為瞭解決這個不匹配的現象,對象關係映射技術應運而生。對象關係映射(Object-Relational Mapping)提供了概念性的、易於理解的模型化資料的方法。ORM方法論基於三個核心原則: 簡單:以最基本的形式建模資料。 傳達性:資料庫結構被任何人都能理解的語言文檔化。 精確性:基於資料模型建立正確標準化的結構。 典型地,建模者通過收集來自那些熟悉應用程式但不熟練的資料建模者的人的資訊開發資訊模型。建模者必須能夠用非技術企業專家可以理解的術語在概念層次上與資料結構進行通訊。建模者也必須能以簡單的單元分析資訊,對樣本資料進行處理。ORM專門被設計為改進這種聯絡。簡單的說:ORM相當於中繼資料。具體到產品上,例如ADO.NET Entity Framework。DLINQ中實體類的屬性[Table]就算是一種中繼資料。
-
軟體名稱
-
對象關係映射
-
英文名
-
Object-Relational Mapping
-
簡 稱
-
ORM
-
應用學科
-
軟體工程
目錄
- 1 對象
- 2 概念
- 3 產品
- 4 映射模式
對象編輯-關聯式資料庫映射規則運算式ORM把應用程式世界表示為具有角色(關係中的部分)的一組對象(實體或值)。ORM有時也稱為基於事實的建模,因為它把相關資料描述為基本事實。這些事實如果分割為再小的事實就會丟失資訊。簡單事實的一些例子包括:人有電話人住在某個地方人生於某個日期人在某個日期被僱傭ORM提供的不只是描述不同對象間關係的一個簡單而直接的方式。ORM還提供了靈活性。使用ORM建立的模型比使用其它方法建立的模型更有能力適應系統的變化。另外,ORM允許非技術企業專家按樣本資料談論模型,因此他們可以使用真實世界的資料驗證模型。因為ORM允許重用對象,資料模型能自動對應到正確標準化的資料庫結構。ORM模型的簡單性簡化了資料庫查詢過程。使用ORM查詢工具,使用者可以訪問期望資料,而不必理解資料庫的底層結構。概念編輯對象-關係映射(OBJECT/RELATIONALMAPPING,簡稱ORM),是隨著物件導向的軟體開發方法發展而產生的。物件導向的開發方法是當今企業級應用開發環境中的主流開發方法,關聯式資料庫是企業級應用環境中永久存放資料的主流資料存放區系統。對象和關係資料是業務實體的兩種表現形式,業務實體在記憶體中表現為對象,在資料庫中表現為關係資料。記憶體中的對象之間存在關聯和繼承關係,而在資料庫中,關係資料無法直接表達多對多關聯和繼承關係。因此,對象-關係映射(ORM)系統一般以中介軟體的形式存在,主要實現程式對象到關聯式資料庫資料的映射。物件導向是從軟體工程基本原則(如耦合、彙總、封裝)的基礎上發展起來的,而關聯式資料庫則是從數學理論發展而來的,兩套理論存在顯著的區別。為瞭解決這個不匹配的現象,對象關係映射技術應運而生。讓我們從O/R開始。字母O起源於 對象(OBJECT),而R則來自於 關係(RELATIONAL)。幾乎所有的程式裡面,都存在對象和關聯式資料庫。在商務邏輯層和使用者介面層中,我們是物件導向的。當對象資訊發生變化的時候,我們需要把對象的資訊儲存在關聯式資料庫中。當你開發一個應用程式的時候(不使用O/R MAPPING),你可能會寫不少資料訪問層的代碼,用來從資料庫儲存,刪除,讀取對象資訊,等等。你在DAL中寫了很多的方法來讀取對象資料,改變狀態物件等等任務。而這些代碼寫起來總是重複的。如果開啟你最近的程式,看看DAL代碼,你肯定會看到很多近似的通用的模式。我們以儲存對象的方法為例,你傳入一個對象,為SQLCOMMAND對象添加SQLPARAMETER,把所有屬性和對象對應,設定SQLCOMMAND的COMMANDTEXT屬性為預存程序,然後運行SQLCOMMAND。對於每個對象都要重複的寫這些代碼。除此之外,還有更好的辦法嗎?有,引入一個O/R MAPPING。實質上,一個O/R MAPPING會為你產生DAL。與其自己寫DAL代碼,不如用O/R MAPPING。你用O/R MAPPING儲存,刪除,讀取對象,O/R MAPPING負責產生SQL,你只需要關心對象就好。對象關係映射成功運用在不同的物件導向持久層產品中,如:TORQUE,OJB,HIBERNATE,TOPLINK,CASTOR JDO, TJDO 等。一般的ORM包括以下四部分:一個對持久類對象進行CRUD操作的API;一個語言或API用來規定與類和類屬性相關的查詢;一個規定MAPPING METADATA的工具;一種技術可以讓ORM的實現同事務對象一起進行DIRTYCHECKING, LAZY ASSOCIATION FETCHING以及其他的最佳化操作。產品編輯眾多廠商和開源社區都提供了持久層架構的實現,常見的有:JAVA系列:APACHE OJBCAYENNEJAXORJPAHIBERNATEIBATIS/MYBATISJRELATIONALFRAMEWORKSMYLETOPLINK其中 TOPLINK 是 ORACLE 的商業產品,其他均為開源項目。其中 HIBERNATE的輕量級 ORM 模型逐步確立了在 JAVA ORM 架構中領導地位,甚至取代複雜而又繁瑣的 EJB 模型而成為事實上的 JAVA ORM 工業標準。而且其中的許多設計均被 J2EE 標準組織吸納而成為最新 EJB 3.0 規範的標準,這也是開源項目影響工業領域標準的有力見證。.NET系列:ENTITYSCODEGENERATELINQ TOSQLGROVERUNGOO.ENTERPRISEORMFIRECODE CREATORMYGENERATIONCODESMITH PROCODEAUTO ...其中:ENTITYSCODEGENERATE :是(VB/C#.NET實體代碼產生工具)的簡稱,ENTITYSCODEGENERATE(ECG)是一款專門為.NET資料庫程式開發量身定做的(ORM架構)代碼產生工具,所產生的程式碼基於物件導向、分層架構、ORM及反射+原廠模式等。支援.NET1.1及以上版本,可用於ORACLE、SQLSERVER、SYBASE、DB2、MYSQL、ACCESS、SQLITE、POSTGRESQL、DM(達夢)、POWERDESIGNER檔案、INFORMIX、FIREBIRD、MAXDB、EXCEL等和OLEDB、ODBC串連的資料庫並可自訂,詳見工具的協助文檔和樣本。LINQ TO SQL :微軟為SQLSERVER資料庫提供的,是.NET FRAMEWORK 3.5 版的一個組件,提供了用於將關係資料作為對象管理的運行時基礎結構。 GROVE:即GROVE ORM DEVELOPMENT TOOLKIT。包含GROVE和TOOLKIT兩部分內容。GROVE為ORM提供對象持久、關聯性物件查詢、簡單交易處理、簡單異常管理等功能。 RUNGOO.ENTERPRISEORM : 是一個基於公司專屬應用程式架構的代碼產生工具,主要適用於B/S模式的應用系統開發。開發語言:C#,支援VS2003和VS2005兩個版本的開發平台,同時支援SQL SERVER2000/2005。 風越代碼產生器 [FIRECODE CREATOR]是一款商業共用基於多種資料庫的程式碼產生軟體,可快速建立:添加、編輯、查看、列表、搜尋功能。支援的資料庫:SQL SERVER、ACCESS、ORACLE、MYSQL、EXCEL、FOXPRO、FOXBASE、TEXT等資料庫連接。映射模式編輯從《公用倉庫元模型:開發指南》一書第8章CWM元倉庫中摘錄出來的內容,實現了公用倉庫元模型(CWM)的UML圖到MICROSOFT SQL SERVER資料庫的映射,是一種將對象階層映射成關係型結構的方法。個人認為可以作為將本體(ONTOLOGY)檔案儲存體到關係型資料庫中的一種可借鑒方法。基本情況:公用倉庫元模型(CWM)是對象管理組織(OMG)的一種和資料倉儲相關的元模型標準,採用UML表示的對象階層,在儲存到資料庫中時由於物件導向的資料庫技術的不完善(理論研究和商業應用都不是主流),所以該書的作者傾向於使用成熟的關係型資料庫來儲存-這也是儲存本體時所遇到的問題。採用方法:將UML模型中的各種元素通過轉換,儲存為資料庫模式。由於CWM是一種元模型,因此模型的執行個體也是一種模型,將這種執行個體以資料庫資料的形式儲存。使用資料庫中比較成熟的預存程序技術提高開發和執行效率。1、資料類型映射模式1.1單一資料型別模式:建立UML和關係型資料庫中單一資料型別的映射表以指導映射。1.2列舉資料型別模式:每種枚舉類型對應一個表,只有一個列(_ENUMLITERAL)表示枚舉值。1.3基於類的資料類型模式:使用外鍵約束,將基礎列與基於類的類型執行個體相關聯。2、類映射模型每個類對應一個表。單值屬性、多值屬性、繼承關係可以用下述方法映射,而引用屬性將在關聯映射模式中提到。2.1單值屬性模式:是CARDINALITY的上界為1的屬性,映射到類所對應的表的列上。若其下界也為1(必須有的屬性),列屬性為NOT NULL。2.2多值屬性模式:每個多值屬性對應成一個獨立的表,使用外鍵串連到類所對應的表上。2.3繼承模式:每加入一個類的執行個體時,根據其繼承關係自頂向下產生每個類的對象,這些對象具有相同的ID(根對象對應記錄的主鍵)。刪除對象執行個體時,自底向上刪除資料。遇到從中間刪的情況怎麼辦?多重繼承怎麼處理?(金龍飛)3、關聯映射模式3.1一對一關聯模式:在關聯兩端各加一列。3.2一對多關聯模式:和3.1一樣。如果多這端是有序的,還需加入一列表示序號。3.3多對多關聯模式:將關聯單獨作一個表。3.4組合關聯模式:注意級聯式刪除。3.5反演關聯模式:關聯兩端指向相關的類型,和普通關聯一樣。3.6成對關聯模式:關聯記錄兩個類間的關係,用交集類表示關聯,表示成一個單獨的表,每個關聯對應一個表,用外鍵表示它們間的關係。3.7關聯上的OCL需要分析成對應的預存程序代碼。3.8保證關聯的CARDINALITY也需要分析成對應的預存程序代碼。4、引用映射模式在UML中不存在的MOF特徵,指屬性是聲明為參考型別的執行個體。用預存程序實現。OPERATIONAL RISK MANAGEMENT
Object Relation Mapping ORM