O/R Mapping 研究報告)

來源:互聯網
上載者:User

1. 業務實體層的設計方案選擇

1) 業務實體層的作用

         一般的應用程式分層的結構如下:

可見,在分層的時候,我們會增加一個實體層,它的作用如下:
         a. 將顯示資料和實際的儲存地區隔離,保證了業務的獨立性,提高了可重用性。
         b. 在業務層和表現層之間傳遞資料。(如果沒有實體層的話,我們需要把表的每個欄位作為一個參數在它們之間傳遞,如果修改的話,將需要影響到程式的各個層)
         c. 提供更大的可收縮性。

2) 業務實體層的幾種選擇方案及其優缺點。

         在.NET環境下實現業務實體有下面的幾種選擇:
         a. DataReader BE 具有最快的讀取速度,用於唯讀場合,不具有OO的概念。
         b. XML BE 可以與XML Reader和DataSet轉換。缺點:效能低,驗證、解析、顯示、排序等都很複雜。
         c. Generic DataSet BE 優點:資料繫結等。缺點:用戶端必須通過集合來擷取資料,沒有類型,執行個體化開銷大,調度效能低。
         d. Typed DataSet BE 優點:由類型,可以進行類型檢查。缺點:只能從DataSet繼承,部署不方便,可擴充性差,執行個體化開銷大,調度效能低。
         e. Custom BE 優點:效能調優,代碼更具有可讀性,用自訂實體類定義一個良好的介面,將複雜問題隱藏在其中。缺點:設計開發都很複雜,需要自己去實現CURD操作,自己去實現資料繫結,工作量很大。
         f. OR Mapping的實現 它具有自訂類的所有優點,同時實現了CRUD,資料繫結等操作。

2. 什麼是OR Mapping?

         ORM,即Object-Relationl Mapping,它的作用是在關係型資料庫和對象之間作一個映射,這樣,我們在具體的操作資料庫的時候,就不需要再去和複雜的SQL語句打交道,只要像平時操作對象一樣操作它就可以了。
          讓我們從OR開始。字母O起源於"對象"(Object),而R則來自於"關係"(Relational)。幾乎所有的程式裡面,都存在對象和關聯式資料庫。在商務邏輯層和使用者介面層中,我們是物件導向的。當對象資訊發生變化的時候,我們需要把對象的資訊儲存在關聯式資料庫中。
         當你開發一個應用程式的時候(不使用OR Mapping),你可能會寫不少資料訪問層的代碼,用來從資料庫儲存,刪除,讀取對象資訊,等等。你在DAL中寫了很多的方法來讀取對象資料,改變狀態物件等等任務。而這些代碼寫起來總是重複的。
          如果開啟你最近的程式,看看DAL代碼,你肯定會看到很多近似的通用的模式。我們以儲存對象的方法為例,你傳入一個對象,為SqlCommand對象添加SqlParameter,把所有屬性和對象對應,設定SqlCommand的CommandText屬性為預存程序,然後運行SqlCommand。對於每個對象都要重複的寫這些代碼。
          除此之外,還有更好的辦法嗎?有,引入一個OR Mapping。實質上,一個OR Mapping會為你產生DAL。與其自己寫DAL代碼,不如用OR Mapping。你用OR Mapping儲存,刪除,讀取對象,OR Mapping負責產生SQL,你只需要關心對象就好。

3. 為什麼要採用OR Mapping?

1) 提高學習開發效率,降低開發成本。
         使用ORM可以大大降低學習和開發成本,現代技術的發展,使得我們不得不不停地學習。我們不僅要學習物件導向、UML、設計模式等知識,而且還需要學習Sql Server、ADO.NET、DataSet、DataReader等知識。而在實際的開發中,真正對客戶有價值的是其獨特的業務功能,而現在的現狀是我們花費了大量的時間在編寫資料訪問,CRUD方法,包括後期的Bug尋找,維護等也會花費相當多的時間在資料處理上。這就是說,我們在實際的開發中很多的時間都被浪費在根本不創造價值的非業務事件上了。
         在使用ORM之後,我們將不需要再浪費太多的時間在ADO.NET和Sql語句上。ORM架構已經把資料庫轉變成了我們熟悉的對象,我們將只需要瞭解物件導向開發就可以實現資料庫應用程式的開發。

2) 簡化代碼,減少BUG數量。
         通過建立ORM系統,能夠大量減少程式開發代碼,實現ORM後,開發資料層就比較簡單,大大減少了出錯機會。
  
3) 提高效能
         同時通過Cache的實現,能夠對效能進行調優,實現了ORM區隔了實際資料存放區和業務層之間的關係,能夠對每一層進行單獨跟蹤,增加了效能最佳化的可能。
  
4) 隔離資料來源,可以很方便的轉換資料庫
         利用ORM可以將業務層與資料存放區隔開,開發人員不需要關係實際儲存的方式,如果我們需要把SQL Server資料庫換成ORACLE資料庫,只需要修改設定檔就可,不需要修改程式。

4. ORM典型工具介紹

由於ORM帶來的強大功能,已經有很多公司或者個人提供ORM的工具。主要途徑有三個:

a.微軟提供的ObjectSpaces

  微軟在VS.NET 2005的Alpha版中就提供了ObjectSpaces,它是在ADO.NET資料層上的一層ORM架構。但是,根據微軟網站上提供的訊息,ObjectSpaces將不會和VS.NET2005 一起發布,它可能會在2006(7)年和WinFS一起發布。所以可能無法在最近的項目中使用。

   註:ObjectSpaces已經正式被在它基礎上重新開發的 LinQ 所取代 

b.開放源碼的免費ORM

  雖然.NET領域的開發源碼還遠遠不及Java領域,但是已經有好多人把Java領域中的最優秀的開發源碼轉移到.NET平台上來。這其中包括做單元測試的NUnit,做日誌的Log4NET,做AOP的pring.NET,以及我們要介紹的做ORM架構的NHibernate。
  
  開發源碼的更新都很頻繁,如果你發現Bug報上去後,他們將會很快在新發布的版本中進行更新。

  開發源碼的作用不僅在於使用,而且他們本身都是非常優秀的架構。在購買電腦圖書的時候有一句話叫“No Coding, No Reading”,而開放源碼中提供了如何構建架構、如何使用模式的最好範例。
  
         關於NHibernate現在文檔還不是很多,但是相信隨著它的正式版的發布,會有越來越多的官方文章出現,也會有越來越多的使用者在網上提供自己的經驗。當然,最直接和有效方法還是去閱讀它的源碼,因為開放源碼的內部實現機制全部透明,所以它的代碼就是最好的文檔。它的代碼結構很清晰,用法更簡潔,並不是很難閱讀。

#c#專欄

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.