天天看點

繼續學習 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架構進行開發。