原来一直使用代码生成,包括CodeSmith和CodeMatic.最近打算系统学习一下Nhibernate,经过简单的一点探索,发现ORM和代码生成真是个有千秋。育学网3i�Rp\s8v

Z5pa)S:e5c  本文侧重比较一下ORM和代码生成二者的优缺点,让二者华山一比高下,目的为去伪存真,使二者能够相辅相成。从而更好的提高开发效率。育学网EKs r?Sg?

x}/M'\3Y*Bj3M  本文从下面三个层面对ORM(以NHibernate为首发的O阵营) 和代码生成(以CodeMatic为首发的C阵营)进行比较:

+bM2d.E�N,hG8N 育学网AYUXX

  1)针对数据库二者的架构层次上的异同

.d6])~'r#? K?+m 育学网9B:eR'U$H2]

  2) 针对应用程序二者在使用和配置上的异同

+_@3zKl 育学网(`D6~.a(Ae0`n4H

  3) 针对业务逻辑二者在对变化和复杂度上支持度的异同。育学网[S,A:w|+Y%H}7|

(Q4iCr V8omf?;v  下面就具体针对这三个层面做一下具体分析,这些分析都来源于自己开发中的一些经验和心得,有些是正确的,有些也存在这样那样的问题。写出来,希望的也只是能抛砖引玉,得到更多朋友,兄弟的帮助和支持。育学网5Lt]2}}fI1Z

育学网.rqCu1w8hlDfd

  1) 针对数据库二者在架构层次上异同育学网%H)\FA%f#y7N

5r!O|7a�]S  首先看一下下面这张图:育学网o,BcZ6[-e z

)K-U,qD Th  ORM针对数据库是由上而下的关系,也 就是说ORM并不依赖于数据库。他可以完全从关系数据库中将程序员解放出来,需要程序员小心呵护的是传递给nhibernate的persistent object.这看起来更加OO,而代码生成恰恰相反,代码生成依赖于关系数据库。它总结数据库操作的一些共性,将本来需要程序员手写的代码自动生成出 来。从OO的角度来说,代码生成的过程并不体现OO思想,但根据模版或者软件作者的一些逻辑。生成出来的代码却可能具有很好的OO思想。针对数据库来说, ORM是自顶向下的,代码生成则是自下而上。二者方向恰好相反。育学网 R9r2r ^;NL`E

育学网"q!Efb/a

  2)针对应用程序二者在使用和配置上的 异同nhinernate的使用需要在原有系统上添加对nhibernate.dll和其他一些相关的dll的引用,而代码生成则不然,代码生成是在另外 的一个软件中,通过指定数据库来生成用于操作数据库的文件,将这些文件添加到项目中的时候才可以正常使用。nhibernate最让人头疼的就是配置和映 射文件的编写。而代码生成,如果需要完成复杂的逻辑和自定义的业务,需要编写CodeSmith等软件的模版,这些模版的编写也不是一件简单的事情。从使 用和配置上看,二者的异同在于使用方法,引用方法,配置文件nhibernate系统内需要添加相关引用,需要编写大量的配置和映射文件。 codematic系统外不需要添加引用,业务简单时不需要配置,复杂时需要编写自定义模版育学网|QyRzG-f4F_O9m

z�h"W+? Rf:K  3)针对业务逻辑二者在对变化和复杂度上支持度的异同

a&O2KK"zj"|w ;z.S.}l8qh&U

Nhibernate与代码生成器介绍(转载)相关推荐

  1. 源代码文档生成 Doxygen介绍(转载)

    源代码文档生成 Doxygen介绍(转载) 收藏 Doxygen介绍 一.Doxygen介绍 在项目开发过程中最重要的是如何和团队中其它成员沟通,如何在项目完成后减低维护成本,随着公司的人员流动,怎样 ...

  2. CCC认证介绍(转载)

    CCC认证介绍(转载) CCC认证介绍 http://www.quality-world.cn/guanli/367.html CCC为英文 ChinaCompulsoryCertification ...

  3. CE认证介绍(转载)

    2007 年 07 月 29 日, 星期日 --&gt CE认证介绍(转载) CE认证介绍 http://www.quality-world.cn/guanli/378.html " ...

  4. 6个强大的PHP/Mysql代码生成器介绍

    一般来说,用PHP和MYSQL编写一个数据库应用程序都会花费很多时间和精力 - 你要设计HTML格式,编写查询,执行验证/错误处理,测试应用程序等大量工作.不过如果你使用PHP代码生成器,您可以节省您 ...

  5. Html5 WebSocket 技术介绍(转载)

    WebSocket是html5规范新引入的功能,用于解决浏览器与后台服务器双向通讯的问题,使用WebSocket技术,后台可以随时向前端推送消息,以保证前后台状态统一,在传统的无状态HTTP协议中,这 ...

  6. Redis的Java客户端Jedis的八种调用方式(事务、管道、分布式…)介绍--转载

    原文地址:http://www.blogways.net/blog/2013/06/02/jedis-demo.html redis是一个著名的key-value存储系统,而作为其官方推荐的java版 ...

  7. 注释驱动的 Spring cache 缓存介绍--转载

    概述 Spring 3.1 引入了激动人心的基于注释(annotation)的缓存(cache)技术,它本质上不是一个具体的缓存实现方案(例如 EHCache 或者 OSCache),而是一个对缓存使 ...

  8. IE 8 Accelerator加速器开发介绍{转载}

    记录这篇博客的原因是因为我自己想要有一个快速的加速器,就是我经常在浏览网页的时候,看到有些网址,如果想要转过去的话,我必须手工复制到地址栏,然后回车一下.然后我就想,如果能直接通过一个快捷方式就太好了 ...

  9. [python爬虫] Selenium常见元素定位方法和操作的学习介绍(转载)

    转载地址:[python爬虫] Selenium常见元素定位方法和操作的学习介绍 一. 定位元素方法 官网地址:http://selenium-python.readthedocs.org/locat ...

最新文章

  1. 关于安装nagios make all时出现问题的解决方法
  2. java垃圾回收system_java应用性能调优之详解System的gc垃圾回收方法
  3. Java面向对象基础整理
  4. Fedora19 搭建LAMP环境
  5. python垃圾回收机制原理_如何理解和掌握Python垃圾回收机制?
  6. golang 新手练习 go语言 10分钟练习贴
  7. Linux Capabilities 入门教程--概念篇
  8. 分享百度文库提交成功的八大因素
  9. MATLAB imshow之后在四周加上边框
  10. 22个国外电子商务系统
  11. 报错:content type application/x-www-form-urlencoded;
  12. Python的基本语法汇总
  13. repo/git提交代码
  14. 关于百度地图API的地图坐标转换问题
  15. web项目中如何启动爬虫程序?Django+Requests+Ajax制作可视化翻译界面详解
  16. 2018深圳杯B题无限拓扑回传规划题解
  17. win10教育版加域提示错误
  18. 如何求两个数的最小公倍数c语言,C程序寻找两个数字的最小公倍数(LCM)
  19. 苹果safari浏览器video视频无法播放
  20. 2019利兹大学计算机排名,2019软科世界大学学术排名利兹大学排名第101-150

热门文章

  1. springMVC 返回json乱码问题
  2. 【elasticsearch 】logstash elasticsearch output plugin 的阻塞问题
  3. 软件测试--接口测试入门
  4. 性能测试利器工具来了,生产环境全链路压测工具
  5. jmeter JDBC Request
  6. php 实现mqtt 订阅监听功能出错_IoT物联网实现M2M设备之间联动实战
  7. 成为一名专业的前端开发人员,需要学习什么?
  8. 如何成为一名优秀的web前端工程师
  9. spring mvc使用html页面,Spring MVC静态页面
  10. ajax常见特效,用ajax实现正在载入的特效-Ajax编程