2007年12月1日

.NET引進物件關連映射技術

最近開始研究O-R Mapping這個議題,感覺似乎有點太慢了些!不過總算是起步了!
下面這一篇報導是介紹微軟的方向,提供給各位參考一下!
原本網址:http://www.ithome.com.tw/itadm/article.php?c=45891

.NET平臺即將推出ADO.NET Entity FrameworkLINQ兩種技術,將資料存取抽象化,降低程式與資料處理語法混雜情況。

 

ORMObject-Relatioaln Mapping,物件-關聯映射)能讓物件導向程式語言在處理關聯式資料庫的資料時,自動將資料表轉換成物件類別庫,建立一個抽象的資料存取層,以維持物件導向觀念與設計的一致性。

無論是Java或開放原始碼陣營,ORM的應用都越來越普及,但近年來.NET平臺上一直沒有推出官方版本。不過在2008年之後,這個態勢即將改觀,微軟將推出ADO.NET Entity Framework(以下簡稱Entity Framework)和LINQ,提供ORM的解決方案。

臺灣微軟應用架構技術經理李匡正認為,Entity FrameworkLINQ雖然都能作為ORM的解決方案,不過本質上卻有差異,尤其LINQ應用的層面並不局限在ORM範疇,特別允許了程式語言可以採用精簡、一致的方式存取不同的資料型態,更能彰顯它的價值。

問:微軟在2008年後,.NET平臺上將會有Entity FrameworkLINQ兩套ORM的解決方案,這是否意謂著ORM將成為趨勢?
答:其實看看近幾年的發展,不論是Java平臺上的HibernateSpring,或是Ruby on Rails上的Active Record,都採用了,就不難看出這項技術蓬勃發展的趨勢。

微軟在推出Entity FrameworkLINQ之後,解決了過去.NET平臺上只能靠社群或協力廠商支援ORM的情況,同時也正式回應ORM的發展趨勢。

問:為什麼ORM技術會盛行?
答:首先,ORM比較貼近物件導向設計的思維,可以將設計結果,很簡單地表達出來。

其次,我們可以從企業實務面來檢視。在Martin Fowler的《Patterns of Enterprise Application Architecture》一書中,將企業資料存取分成三種方式,第一種是Transaction Script,它利用自訂的類別方法將資料相關的存取包裝起來。第二種是Table Module,它將Dataset作為類別封裝和處理的單位。最後一種最完美的方法是Domain Model,它將一個類別對映一個資料表,所有資料的結果都能對映到Domain屬性。

三種當中以Domain Model最具彈性,而且最能應付企業中多變的需求與邏輯變更,但缺點是初期開發成本高。而有了ORM,可以有效降低Domain Model一開始的成本,增加軟體的彈性,架構也會更漂亮。

問:為什麼微軟會一口氣推出兩套ORM的解決方案?
答:事實上,兩者雖然都能當作ORM的解決方案,本質上卻有極大的差別。Entity Framework是框架層級的ORM解決方案,而LINQ卻是從程式語言層級實現,也就是在程式語言中實作出資料存取的功能。除此之外,ORM只是LINQ三分之一的功能。LINQ除了能存取關聯式資料庫之外,還能用一致性的方法存取物件和XML檔案,這是Entity Framework所缺乏的。

如果從關聯式資料庫的存取角度來看,微軟的確同時有兩套ORM解決方案,但在語言本質和應用上,兩者還是有許多的差別。

問:能不能進一步說明兩者間的差別?
答:就語言的應用來說,LINQ較適用於框架開發人員,而Entity Framework則較適用於應用程式開發人員。這從它們支援的資料庫也可以看出這種屬性。LINQ目前只支援Microsoft SQL Server,因為站在一個微軟的框架開發人員的角度來看,需要存取的資料來源,大概不會脫離SQL Server。但是Entity Framework就必須能介接、處理SQL Server以外的資料源,因為應用程式開發人員必須面對實際的企業各種資料來源,不可能只存取SQL Server

問:由於兩者有部分重疊之處,微軟有沒有建議在應用上如何區分?
答:目前微軟官方還沒有正式的文件介紹,不過就兩者的特性而言,最明顯的區隔仍然是資料庫的差異,如果應用的資料庫產品超出SQL Server,那麼唯一的選擇就是Entity Framework

另外,LINQ將查詢能力放到程式語言中,所以要在執行時期大幅度更動查詢語法,難度較高,而Entity Framework能在執行時期動態組出查詢語言,更動的難度低。因此執行時期查詢語法的複雜程度,也可以當作選擇的參考。

然而LINQ具備的物件查詢能力和XML查詢能力,這是Entity Framework所缺乏的,因此如果查詢的資料涉及關聯式資料庫以外的資料型態,LINQ就是最佳選擇。

問:看來,LINQ超過ORM的範疇,當初設計的目的是為了什麼?
答:開發LINQ的領導人是微軟的技術院士(Technical FellowAnders Hejlsberg,他是C#的創始人,也是.NET Framewrok底層技術的重要推手。Anders設計LINQ的初衷,可以追溯到他在Borland任職的時代。當年他曾在公開場合提過,希望能把資料存取方法融入到Delphi語言中,建立一致性的存取模式。這個夢想,如今在.NET平臺上實現。

程式開發人員經常必須面臨不同的資料型態處理,除了剛剛提到,也是最常見的關聯式資料庫之外,另外像是XML這種階層型的資料型態,以及物件導向中的種種物件資料型態也包含在內。隨著資料型態不同,存取的方式就會有差異,因此開發人員就必須學習各種資料存取方式,所寫出來的程式碼也通常是冗長、不漂亮的。

因此LINQ的目標,就是建立一個資料存取的抽象層,開發人員不用再去接觸底層細節的技術,讓資料來源的相依程度降低,把不同型態的資料存取盡可能地一致化,減少開發人員的負擔,也藉由這樣的機制,精簡程式碼。

問:用一致性的方法存取不同資料形態,好處在哪裡?
答:例如XML的查詢一直是門檻相對較高的技術,善用這個方法可以簡化處理。由於XML的資料像是DOM必須一層層去找,或像SAX必須用事件的方式觸發,這些查詢的語法都不會太漂亮,當XML階層式的結構很複雜,要找到特定節點,可能要寫非常冗長的程式碼。雖然XML本身也有一些技術嘗試解決這些問題,像是XPath,但熟悉這類技術的人數,遠少於懂得SQL語法的人,這是因為SQL接近自然語言。LINQ便是採用近似SQL的語法查詢XML,能讓程式碼精簡很多。

類似的語法也能拿來查詢物件。由於每一種物件導向程式語言都包含資料結構,例如陣列、堆疊、佇列等,要從這類物件中找到所需資料,每種語言都會實作不同的語法,程式開發人員需熟悉不同的方法,相對來說,也會增加開發人員的負擔。而透過LINQ,就能用一致的方法,查詢物件中的資料。

問:Entity FrameworkLINQ正式發布的時間?
答:Entity Framework將會在2008年的上半年發布,屆時會用Update Pack的方式加到.NET Framework 3.5Visual Studio 2008當中。目前Entity Framework已經發布beta 2版本,這版本已經提供視覺化工具Entity Data Model Wizard,開發人員在使用上將更為方便。

LINQ將隨著.NET Framewrok 3.5發布,屆時C# 3.0VB 9.0都將支援。文黃天賜


 

沒有留言:

張貼留言