自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

講解Nhibernate與代碼生成

開發(fā) 后端
這里介紹Nhibernate與代碼生成,包括介紹針對(duì)數(shù)據(jù)庫二者在架構(gòu)層次上異同、針對(duì)應(yīng)用程序二者在使用和配置上的異同和針對(duì)業(yè)務(wù)邏輯二者在對(duì)變化和復(fù)雜度上支持度的異同等。

在向大家詳細(xì)介紹Nhibernate之前,首先讓大家了解下ORM和代碼生成,然后全面介紹Nhibernate。

原來一直使用代碼生成,包括CodeSmith和CodeMatic.最近打算系統(tǒng)學(xué)習(xí)一下Nhibernate,經(jīng)過簡單的一點(diǎn)探索,發(fā)現(xiàn)ORM和代碼生成真是個(gè)有千秋。

本文側(cè)重比較一下ORM和代碼生成二者的優(yōu)缺點(diǎn),讓二者華山一比高下,目的為去偽存真,使二者能夠相輔相成。從而更好的提高開發(fā)效率。

本文從下面三個(gè)層面對(duì)ORM(以NHibernate為首發(fā)的O陣營) 和代碼生成(以CodeMatic為首發(fā)的C陣營)進(jìn)行比較:

1.針對(duì)數(shù)據(jù)庫二者的架構(gòu)層次上的異同。

2.針對(duì)應(yīng)用程序二者在使用和配置上的異同。

3.針對(duì)業(yè)務(wù)邏輯二者在對(duì)變化和復(fù)雜度上支持度的異同。

下面就具體針對(duì)這三個(gè)層面做一下具體分析,這些分析都來源于自己開發(fā)中的一些經(jīng)驗(yàn)和心得,有些是正確的,有些也存在這樣那樣的問題。寫出來,希望的也只是能拋磚引玉,得到更多朋友,兄弟的幫助和支持。

1.針對(duì)數(shù)據(jù)庫二者在架構(gòu)層次上異同

ORM針對(duì)數(shù)據(jù)庫是由上而下的關(guān)系,也就是說ORM并不依賴于數(shù)據(jù)庫。他可以完全從關(guān)系數(shù)據(jù)庫中將程序員解放出來,需要程序員小心呵護(hù)的是傳遞給nhibernate的persistent object.這看起來更加OO,而代碼生成恰恰相反,代碼生成依賴于關(guān)系數(shù)據(jù)庫。它總結(jié)數(shù)據(jù)庫操作的一些共性,將本來需要程序員手寫的代碼自動(dòng)生成出來。從OO的角度來說,代碼生成的過程并不體現(xiàn)OO思想,但根據(jù)模版或者軟件作者的一些邏輯。生成出來的代碼卻可能具有很好的OO思想。針對(duì)數(shù)據(jù)庫來說,ORM是自頂向下的,代碼生成則是自下而上。二者方向恰好相反。

2.針對(duì)應(yīng)用程序二者在使用和配置上的異同

nhinernate的使用需要在原有系統(tǒng)上添加對(duì)nhibernate.dll和其他一些相關(guān)的dll的引用,而代碼生成則不然,代碼生成是在另外的一個(gè)軟件中,通過指定數(shù)據(jù)庫來生成用于操作數(shù)據(jù)庫的文件,將這些文件添加到項(xiàng)目中的時(shí)候才可以正常使用。nhibernate最讓人頭疼的就是配置和映射文件的編寫。而代碼生成,如果需要完成復(fù)雜的邏輯和自定義的業(yè)務(wù),需要編寫CodeSmith等軟件的模版,這些模版的編寫也不是一件簡單的事情。從使用和配置上看,二者的異同在于使用方法,引用方法,配置文件nhibernate系統(tǒng)內(nèi)需要添加相關(guān)引用,需要編寫大量的配置和映射文件。codematic系統(tǒng)外不需要添加引用,業(yè)務(wù)簡單時(shí)不需要配置,復(fù)雜時(shí)需要編寫自定義模版 bbs.j2mehome.com

3.針對(duì)業(yè)務(wù)邏輯二者在對(duì)變化和復(fù)雜度上支持度的異同

假如原有一個(gè)User表,這個(gè)表已經(jīng)運(yùn)行了一段時(shí)間。但目前需要在User表里面添加一個(gè)可為null的字段:BirthDay,二者對(duì)此需求的響應(yīng)各自是應(yīng)該是怎么樣的呢?

數(shù)據(jù)庫改動(dòng) 配置改動(dòng) 代碼更改nhibernate 無需 需要映射文件中添加對(duì)BirthDay的映射 更改User類,添加屬性BirthDaycodematic 需要在User表里面添加一個(gè)BirthDay字段 不需要更改 ***使用狀態(tài)下需要從數(shù)據(jù)層到業(yè)務(wù)邏輯層重新生成代碼,如果以前有改動(dòng),則需要手動(dòng)添加BirthDay向伽相關(guān)代碼針對(duì)于單表操作,二者都比較簡單,但是當(dāng)業(yè)務(wù)變得復(fù)雜的時(shí)候,二者在表現(xiàn)力如何呢?比如現(xiàn)在有這樣一種應(yīng)用環(huán)境,計(jì)算和維護(hù)職員和工資:
1.列出所有職員。
2.列出某個(gè)職員的某月的工資信息。
3.統(tǒng)計(jì)某個(gè)員工在第2個(gè)季度的總工資。
4.計(jì)算上半年公司支付給員工的總工資。其中包括已離職人員的工資。

在這樣一種應(yīng)用環(huán)境下,分別討論二者如何應(yīng)付數(shù)據(jù)表 業(yè)務(wù)對(duì)象 配置文件業(yè)務(wù)對(duì)象的使用nhibernate 無需創(chuàng)建 手動(dòng)編寫User,Salary業(yè)務(wù)對(duì)象。 需要編寫配置文件,標(biāo)示業(yè)務(wù)對(duì)象的主從關(guān)系在二者差生圍度和關(guān)聯(lián)時(shí),內(nèi)置支持codematic 需要?jiǎng)?chuàng)建User和Salary表,并指定主從 不需 不需產(chǎn)生關(guān)聯(lián)和圍度時(shí),需要手工更改數(shù)據(jù)底層和上層業(yè)務(wù)代碼。

總結(jié),ORM和代碼生成二者各有各自的好處,但綜合考慮ORM更符合OO的口味,而代碼生成則比較靈活,可以應(yīng)用到除了數(shù)據(jù)庫操作的其他方面。比如生成nhibernate需要的映射文件等。加上原有的URM和數(shù)據(jù)建模,幾者共用,開發(fā)效率一定會(huì)有較大的提高。

【編輯推薦】

  1. LINQ to SQL與NHibernate橫向?qū)Ρ?/FONT>
  2. 淺析NHibernate一對(duì)一映射的延遲加載
  3. NHibernate2.1新特性之Tuplizers
  4. .NET ORM框架NHibernate Linq 1.0發(fā)布
  5. 微軟發(fā)布NHibernate Linq 1.0 RTM以支持開源
責(zé)任編輯:佚名 來源: IT168
相關(guān)推薦

2009-09-27 13:34:12

NHibernate

2009-09-22 09:31:08

LINQ to SQL

2021-10-03 14:37:06

編程語言程序員代碼

2010-01-14 11:23:55

cyrus-sasl安

2010-01-28 16:01:18

Android Jni

2023-10-27 08:33:40

Go語言元編程

2010-04-30 16:19:17

Unix內(nèi)核

2009-11-05 09:42:42

Visual Stud

2009-12-24 13:51:49

WPF文檔打印

2009-12-02 19:08:19

PHP跳轉(zhuǎn)代碼

2010-06-29 12:42:05

UDP協(xié)議Java

2009-11-27 13:24:20

PHP代碼性能優(yōu)化

2023-01-26 23:59:24

Ansibleplaybook列表

2009-12-30 14:51:47

Silverlight

2010-05-07 16:12:01

Unix系統(tǒng)

2010-03-19 14:42:29

Java Socket

2009-06-08 16:52:00

2011-08-16 10:17:12

XCode模版引擎XTemplate

2017-03-20 17:49:21

Java Web模板代碼

2010-05-07 14:29:45

Unix--Tripw
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)