Nhibernate分析之華山論劍篇

2021-08-22 15:28:45 字數 2131 閱讀 3386

原來一直使用**生成,包括codesmith和天平兄的codematic。最近打算系統學習一下nhibernate,經過簡單的一點探索,發現orm和**生成真是個有千秋。本文側重比較一下orm和**生成二者的優缺點,讓二者華山一比高下,目的為去偽存真,使二者能夠相輔相成。從而更好的提高開發效率。

本文從下面三個層面對orm(以nhibernate為首發的o陣營) 和**生成(以codematic為首發的c陣營)進行比較:

1)針對資料庫二者的架構層次上的異同

2) 針對應用程式二者在使用和配置上的異同

3) 針對業務邏輯二者在對變化和複雜度上支援度的異同。

下面就具體針對這三個層面做一下具體分析,這些分析都**於自己開發中的一些經驗和心得,有些是正確的,有些也存在這樣那樣的問題。寫出來,希望的也只是能拋磚引玉,得到更多朋友,兄弟的幫助和支援。

1) 針對資料庫二者在架構層次上異同

首先看一下下面這張圖:

orm針對資料庫是由上而下的關係,也就是說orm並不依賴於資料庫。他可以完全從關聯式資料庫中將程式設計師解放出來,需要程式設計師小心呵護的是傳遞給nhibernate的persistent object。這看起來更加oo,而**生成恰恰相反,**生成依賴於關聯式資料庫。它總結資料庫操作的一些共性,將本來需要程式設計師手寫的**自動生成出來。從oo的角度來說,**生成的過程並不體現oo思想,但根據模版或者軟體作者的一些邏輯。生成出來的**卻可能具有很好的oo思想。針對資料庫來說,orm是自頂向下的,**生成則是自下而上。二者方向恰好相反。

2)針對應用程式二者在使用和配置上的異同

nhinernate的使用需要在原有系統上新增對nhibernate.dll和其他一些相關的dll的引用,而**生成則不然,**生成是在另外的乙個軟體中,通過指定資料庫來生成用於運算元據庫的檔案,將這些檔案新增到專案中的時候才可以正常使用。nhibernate最讓人頭疼的就是配置和對映檔案的編寫。而**生成,如果需要完成複雜的邏輯和自定義的業務,需要編寫codesmith等軟體的模版,這些模版的編寫也不是一件簡單的事情。從使用和配置上看,二者的異同在於

使用方法

引用方法

配置檔案

nhibernate

系統內需要新增相關引用

需要編寫大量的配置和對映檔案。

codematic

系統外不需要新增引用

業務簡單時不需要配置,複雜時需要編寫自定義模版

3)針對業務邏輯二者在對變化和複雜度上支援度的異同

假如原有乙個user表,這個表已經執行了一段時間。但目前需要在user表裡面新增乙個可為null的字段:birthday,二者對此需求的響應各自是應該是怎麼樣的呢?

資料庫改動

配置改動

**更改

nhibernate

無需需要對映檔案中新增對birthday的對映

更改user類,新增屬性birthday

codematic

需要在user表裡面新增乙個birthday欄位

不需要更改

最佳使用狀態下需要從資料層到業務邏輯層重新生成**,如果以前有改動,則需要手動新增birthday向伽相關**

針對於單錶操作,二者都比較簡單,但是當業務變得複雜的時候,二者在表現力如何呢?比如現在有這樣一種應用環境,計算和維護職員和工資,需求:1)列出所有職員 2)列出某個職員的某月的工資資訊 3) 統計某個員工在第2個季度的總工資。4)計算上半年公司支付給員工的總工資。其中包括已離職人員的工資。

在這樣一種應用環境下,分別討論二者如何應付

資料表業務物件

配置檔案

業務物件的使用

nhibernate

無需建立

手動編寫user,salary業務物件。

需要編寫配置檔案,標示業務物件的主從關係

在二者差生圍度和關聯時,內建支援

codematic

需要建立user和salary表,並指定主從

不需不需

產生關聯和圍度時,需要手工更改資料底層和上層業務**

總結,orm和**生成二者各有各自的好處,但綜合考慮orm更符合oo的口味,而**生成則比較靈活,可以應用到除了資料庫操作的其他方面。比如生成nhibernate需要的對映檔案等。加上原有的urm和資料建模,幾者共用,開發效率一定會有較大的提高。

Nhibernate分析之華山論劍篇

原來一直使用 生成,包括code ith和天平兄的codematic。最近打算系統學習一下nhibernate,經過簡單的一點探索,發現orm和 生成真是個有千秋。本文側重比較一下orm和 生成二者的優缺點,讓二者華山一比高下,目的為去偽存真,使二者能夠相輔相成。從而更好的提高開發效率。1 針對資料...

Nhibernate分析之華山論劍篇

原來一直使用 生成,包括code ith和天平兄的codematic。最近打算系統學習一下nhibernate,經過簡單的一點探索,發現orm和 生成真是個有千秋。本文側重比較一下orm和 生成二者的優缺點,讓二者華山一比高下,目的為去偽存真,使二者能夠相輔相成。從而更好的提高開發效率。本文從下面三...

nhibernate架構分析

以nhibernate prealpha build 2為準 從圖中可以看到,session和sessionfactory是nhibernate的核心部分。sessionfactory維護到持久機制 資料庫 的連線並對它們進行管理,同時還儲存著所有持久物件的對映資訊。sessionfactory由c...