柚子Nan--回归原点

Everything can be as easy as you like or as complex as you need.
posts - 231, comments - 970, trackbacks - 17, articles - 29
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

由为什么要学习NHibernate说开去

Posted on 2005-06-04 15:34 柚子Nan 阅读(3249) 评论(15)  编辑 收藏 所属分类: [技术.Net][成长经历]
      昨天看到听棠.NET对于学习NHibernate 提出了非常宝贵的意见,希望每次的研究或者玩一个工具都不要放弃,这点我绝对赞成(我们很多人都是一种3分钟的热度,老外就比较钻研一点,任何一个东西学精通了都很牛),也许你说中了很多点,但是也有些你没有说中,我经历了一些开发,虽然还不是很丰富,关于架构也略知一二。现在所在的公司,也有一些OR Mapping 的工具、代码,我自己没有达到他的水平,当然也写不出这样的代码。不过,至于我为什么要学习NHibernate, 你觉得 Nhibernate不好,但是 Hibernate 都已经有3.0了,为什么能够发展下去?为什么微软也在搞自己的OR Mapping 工具,呵,盲目崇拜、突出自己的水平,有必要吗?
 
     相信熟悉Java的同志们都知道JavaEye这个网站,我想很多学习.Net的人也知道这个。她的创始人,Robbin,曾经写过为什么要学习Hibernate,以及如何学习Hibernate,最近刚刚出版的《深入浅出Hibernate》虽然他不是作者,但是我想他一定在这个过程中贡献过自己的力量(他们几个都很熟悉)。可以参考一下他的文章,虽然是2年前的了!听CSDN的编辑GiGix吹过一次牛,虽然他说的不一定正确,他提到了很多技术,很多很大的名词,最终总结了一句“古已有之”!
 
     至于我,我自从学习开发软件以来,一直在考虑我们的OOA和OOD都是怎么做的,到底这些东西都是为了做个漂亮、专业的报告而搞出一点花样吗,还是为了真正解决项目中的问题。任何项目一开始,正规的做法都是做需求,做用例,也开始了画类图、对象图、序列图、设计界面、设计数据库,这样就结束了设计!但是真正开始了编码的时候,除了界面、数据库,其它几乎全部都抛弃了!为什么抛弃了,因为发现我们开始编码以后,我们就回到了Table模式,DataSet模式进行思考问题,这个表存放什么字段,两个表之间如何关联,就是Justin Gehtland所谓的tabular programming;而不是在考虑两个业务对象之间如何交互,如何发送消息了。为什么在OOA和OOD之间出现了这么大鸿沟呢?我们设计的类图和数据库的关系图、以及后续的Coding之间是否可以很好的过渡呢?OR Mapping,正如他的名字一样,Object Relationship Mapping,这里的O就是我们平时所说的面向对象,这里的R就是我们说的关系数据库,既然NHibernate生来就是为了解决这问题的,为什么不学习一下?了解一下他是怎么运作的。Martin  Fowler先生在《企业应用架构模式》中极力推崇使用Domain Model进行领域模型的设计和开发,然后平滑的过渡、映射到数据库,我想NHibnernate也许能帮这个忙!
 
     至于你说的SQL或者HQL的迷阵也好,还是性能问题也好,我觉得这个东西是其次的,都可以经过一段时间的熟练以后过渡过来,真正的软件设计的目标和目的肯定不是这个,而是如何实现项目的最终目标,满足客户的需求,保证开发人员对于需求的把握更佳!而不是每次来了Change Request以后,就开始了修改庞大的修改SQL语句的工程,也许有些片面,如果项目要Close了,势必要进行更新所有的类图,序列图和其他大量的文档,而此时,类图、序列图和其他文档反而成了一种累赘,那么为什么我们要他呢?
 
     所以,总结一句,我是希望通过学习HNhibernate掌握持久层设计应该把握的原则和技巧,深刻地理解对象持久层设计理念!试图寻找一个更好的软件开发思路!!

Feedback

#1楼    回复  引用  查看    

2005-06-04 17:00 by 小李程式™      
偶也想学习 HNhibernate,请多指教!多分享一些经验啊!

#2楼    回复  引用  查看    

2005-06-04 20:24 by 听棠.NET      
楼主,你的观点我也同意,学习NH,其实不是要学会怎么用NH,而是学习NH中阐述的那种思想,那种让业务层面象对象,业务与数据分离的开发模式。我觉得在NH中可以很明鲜的学到ORM的经典理念,我也没有全盘否定NH。
只是我觉得在学习一个东西时,我们应该在思考的,我们是在分辨的,在思考中我们其实可以发现,有些东西并不是理论上所说的那么完善,我想NH也在试着扩展新的论点与偿试,因此我们最好进行这些东西的讨论,而不是只追捧理念。
楼主可能是因为我不满意NH的HQL吧。其实我没有深入学习HQL,只是我看了前面部分我就失去了兴趣,我想有很多朋友在看HQL后会有同感,当然,有人也跟我说过对HQL的不满。

#3楼    回复  引用  查看    

2005-06-04 20:27 by 听棠.NET      
还有,楼主.NET中的NH与JAVA中的Hibernate一是一个东西吧。我没学过Hibernate,但听JAVA转.NET的朋友说,Hibernate要比NH好。

#4楼    回复  引用    

2005-06-05 11:29 by neuhawk [未注册用户]
NH还不够成熟!

#5楼 [楼主]   回复  引用  查看    

2005-06-06 08:41 by 柚子Nan      
NHibernate 是Hibernate的.Net版本,现在还远远没有成熟。
不过值得期待!

#6楼    回复  引用    

2005-06-09 09:04 by zxy [未注册用户]
我现在在一个小型的项目中使用过。我碰到的问题是如果有多表关联,取数据时会把全部数据取出来,更新,查询都是要用到全部字段。数据量很大。

#7楼    回复  引用    

2005-06-09 09:15 by zxy [未注册用户]
使用NHibernate的经验:如果出了错误是没有持久化到对象(出错信息是英文,反正意思是这个意思)则有可能的原因是没有把*.hbm.xml文件属性中生成操作设为“嵌入的资源”,有一次我做的项目中出了这个错误,查了好久都查出原因,最后才查到是XML文件缺少了hbm后缀。

#8楼    回复  引用    

2005-06-09 09:18 by zxy [未注册用户]
如果做的项目是一个小型项目,并且由你负责,我的建议还是在项目中使用一下NHibernate,

#9楼    回复  引用    

2005-07-04 10:49 by zxy [未注册用户]
这么多天了,居然只有这么几条留言,最后几条还是我的.

#10楼    回复  引用    

2005-07-04 19:41 by 柚子Nan [未注册用户]
最近项目太紧张。
客户要求要Release项目,现在正在进行ST,每天都是修Bug/

#11楼    回复  引用  查看    

2005-11-01 12:38 by Lyon 's Tech World      
我觉得NHibernate确实让人的思想比较OO一些,但是NH本身现在感觉确实还有待改进,好像现在还没有一种方便的方式调用存储过程,这样的话,就不能利用存储过程的优化特性了

#12楼    回复  引用    

2005-11-01 15:25 by 柚子Nan [未注册用户]
怎么会阿?NHibernate调用存储过程很方便的!
请问如果一张表有双主键,那么怎么添加记录?

#14楼    回复  引用  查看    

2006-03-27 12:29 by 梁广永      
实话

#15楼    回复  引用  查看    

2006-05-18 00:37 by Vinson      
请问怎么用NHIBERNATE选择特定的数据,比如从100到200条?有好的方法吗?

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
 
历史上的今天:

另存  打印