讲解Nhibernate与代码生成
创始人
2024-06-08 00:11:22
0

在向大家详细介绍Nhibernate之前,首先让大家了解下ORM和代码生成,然后全面介绍Nhibernate。

原来一直使用代码生成,包括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系统外不需要添加引用,业务简单时不需要配置,复杂时需要编写自定义模版 bbs.j2mehome.com

3.针对业务逻辑二者在对变化和复杂度上支持度的异同

假如原有一个User表,这个表已经运行了一段时间。但目前需要在User表里面添加一个可为null的字段:BirthDay,二者对此需求的响应各自是应该是怎么样的呢?

数据库改动 配置改动 代码更改nhibernate 无需 需要映射文件中添加对BirthDay的映射 更改User类,添加属性BirthDaycodematic 需要在User表里面添加一个BirthDay字段 不需要更改 ***使用状态下需要从数据层到业务逻辑层重新生成代码,如果以前有改动,则需要手动添加BirthDay向伽相关代码针对于单表操作,二者都比较简单,但是当业务变得复杂的时候,二者在表现力如何呢?比如现在有这样一种应用环境,计算和维护职员和工资:
1.列出所有职员。
2.列出某个职员的某月的工资信息。
3.统计某个员工在第2个季度的总工资。
4.计算上半年公司支付给员工的总工资。其中包括已离职人员的工资。

在这样一种应用环境下,分别讨论二者如何应付数据表 业务对象 配置文件业务对象的使用nhibernate 无需创建 手动编写User,Salary业务对象。 需要编写配置文件,标示业务对象的主从关系在二者差生围度和关联时,内置支持codematic 需要创建User和Salary表,并指定主从 不需 不需产生关联和围度时,需要手工更改数据底层和上层业务代码。

总结,ORM和代码生成二者各有各自的好处,但综合考虑ORM更符合OO的口味,而代码生成则比较灵活,可以应用到除了数据库操作的其他方面。比如生成nhibernate需要的映射文件等。加上原有的URM和数据建模,几者共用,开发效率一定会有较大的提高。

【编辑推荐】

  1. LINQ to SQL与NHibernate横向对比
  2. 浅析NHibernate一对一映射的延迟加载
  3. NHibernate2.1新特性之Tuplizers
  4. .NET ORM框架NHibernate Linq 1.0发布
  5. 微软发布NHibernate Linq 1.0 RTM以支持开源

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...