繼續學習 O/R Mapping

1.   業務實體層的設計方案選擇    
      1)   業務實體層的作用    
      一般的應用程序分層的結構如下:    
         
      可見,在分層的時候,我們會增加一個實體層,它的作用如下:    
      ①   將顯示數據和實際的存儲區域隔離,保證了業務的獨立性,提高了可重用性。    
      ②   在業務層和表現層之間傳遞數據。(如果沒有實體層的話,我們需要把表的每個字段作爲一個參數在它們之間傳遞,如果修改的話,將需要影響到程序的各個層)    
      ③   提供更大的可收縮性。    
         
      2)   業務實體層的幾種選擇方案及其優缺點。    
      在.NET環境下實現業務實體有下面的幾種選擇:    
      ①   DataReader   BE   具有最快的讀取速度,用於只讀的場合,不具有OO的概念。    
      ②   XML   BE   可以與XML   Reader和DataSet轉換。缺點:性能低,驗證、解析、顯示、排序等都很複雜。    
      ③   Generic   DataSet   BE   優點:數據綁定等。缺點:客戶端必須通過集合來獲取數據,沒有類型,實例化開銷大,調度性能低。    
      ④   Typed   DataSet   BE   優點:由類型,可以進行類型檢查。缺點:只能從DataSet繼承,部署不方便,可擴展性差,實例化開銷大,調度性能低。    
      ⑤   Custom   BE 優點:性能調優,代碼更具有可讀性,用自定義實體類定義一個良好的接口,將複雜問題隱藏在其中。缺點:設計開發都很複雜,需要自己去實現CURD操作,自己去實現數據綁定,工作量很大。    
      ⑥   O/R   Mapping的實現   它具有自定義類的所有優點,同時實現了CRUD,數據綁定等操作。    
      2.   什麼是O/R   Mapping?    
      ORM,即Object-Relationl   Mapping,它的作用是在關係型數據庫和對象之間作一個映射,這樣,我們在具體的操作數據庫的時候,就不需要再去和複雜的SQL語句打交道,只要像平時操作對象一樣操作它就可以了。    
          讓我們從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,你只需要關心對象就好。    
         
      3.   爲什麼要採用O/R   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的工具。主要途徑有三個:    
      ①   微軟提供的ObjectSpaces    
      微軟在VS.NET   2005的Alpha版中就提供了ObjectSpaces,它是在ADO.NET數據層上的一層ORM框架。但是,根據微軟網站上提供的消息,ObjectSpaces將不會和VS.NET2005   一起發佈,它可能會在2006(7)年和WinFS一起發佈。所以可能無法在最近的項目中使用。    
         
      ②   開放源碼的免費ORM    
      雖然.NET領域的開發源碼還遠遠不及Java領域,但是已經有好多人把Java領域中的最優秀的開發源碼轉移到.NET平臺上來。這其中包括做單元測試的NUnit,做日誌的Log4NET,做AOP的Spring.NET,以及我們要介紹的做ORM框架的NHibernate。    
         
      開發源碼的更新都很頻繁,如果你發現Bug報上去後,他們將會很快在新發布的版本中進行更新。    
      開發源碼的作用不僅在於使用,而且他們本身都是非常優秀的架構。在購買計算機圖書的時候有一句話叫“No   Coding,   No   Reading”,而開放源碼中提供瞭如何構建架構、如何使用模式的最好範例。    
         
      關於NHibernate現在文檔還不是很多,但是相信隨着它的正式版的發佈,會有越來越多的官方文章出現,也會有越來越多的使用者在網上提供自己的經驗。當然,最直接和有效的方法還是去閱讀它的源碼,因爲開放源碼的內部實現機制全部透明,所以它的代碼就是最好的文檔。它的代碼結構很清晰,用法更簡潔,並不是很難閱讀。    
         
      ③   其他公司商業ORM產品    
      也有一些公司使用是DevExpress的XPO作爲ORM框架進行開發。  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章