论坛首页 编程语言技术论坛

ADO.NET完成的hibernate没有完成的事情

浏览 11552 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (18) :: 隐藏帖 (1)
作者 正文
   发表时间:2009-03-13  
    最近在做.NET平台上C#+SPRING.NET+Nhibernate的开发,之前一直在做.NET+SQL SERVER2005的开发,这里对比两者的差异,发表一些观点
    不管我们用的是hibernate还是nhibernate,在从数据库返回了数据之后,我们总是需要自己去构建模型层。不可否认,自己构建模型层的结构,确实更大程度上的把开发的主动权控制在了我们程序员的手中,但是由此带来的不便也是显而易见的。如果我们使用ADO.NET,那么我们在处理返回的dataset的时候,其已经对里面的datatable构建好了。省去了我们对模型层字段的设置和配置,我们只需要知道数据库返回的是什么字段,在做数据绑定的时候,对应这个字段就行了。对字段的类型所关心的很少,我们有更多的时间来关心业务上的问题。
    但是,当我们用Nhibernate的时候,模型层需要我们自己去构建domain和dto,这个本身就花费了我们大部分的时间。而且我从网上查了一些资料,其实nhibernate的实际效率并不比dataset要高哪里去。如果说仅仅是内存上的多占用的那部分,我相信这点内存我们还是支付的起的。但是,hibernate思维方式带给我们的麻烦事情还远没有结束。每当存储过程改变的时候,也就是从数据库返回的数据集的字段有所改变的时候,我们这个时候需要做的不仅仅是需要改变页面表现层的字段名,而且还要动domain或是dto的字段设置,尤其是字段类型。这些都是相当繁琐,而且增加了程序员犯错的机会,降低了开发的速度。
    不可否认,MS把这些东西都给我们封装的太完美了,而完美如果非要说“挣脱MS的枷锁,做自己开发的主人”这种话,什么都自己去做的话,也是会付出很大的代价的。别人有好的东西,我们还是应该承认。
    抛砖引玉。
   发表时间:2009-03-13  
你实际上是纯面向数据库思考。你脑子里根本没有领域模型的概念。你的认知里所有的数据都是关系表而不是对象。结果项目领域模型变化的时候,你也只愿意改数据库。而根本没有想到其实应该先变化的是Domain,因为Domain的变化,所以数据库才要变化。整个一个本末倒置。
而且你们使用的是纯面向数据库开发。所有的业务逻辑都封到存储过程里头了。在这种开发模式下ORM框架根本不能发挥其优势。如果要发挥ORM的优势,必须面向对象开发。不是用了支持类的语言就是面向对象。
3 请登录后投票
   发表时间:2009-03-13   最后修改:2009-03-13
hibernate的核心是oop
dto层和dao层我们一般用工具生成
如果你要简单方便的话,datatable的机制已经足够了

spring.net+nhibernate还是不错的~~
但是他们的point不在你说的这些地方~~
0 请登录后投票
   发表时间:2009-03-13  
思考方式不一样.俺现在也比较习惯DataSet 的思考方式,因为用了很多年的sql .

但回想当初学数据库的时候也曾经有过辛苦理解的日子.
0 请登录后投票
   发表时间:2009-03-13  
lobbychmd 写道
思考方式不一样.俺现在也比较习惯DataSet 的思考方式,因为用了很多年的sql .

但回想当初学数据库的时候也曾经有过辛苦理解的日子.


这根本不是什么思考方式不同的问题,lz根本就没有领域模型的概念!

严重同意2楼
0 请登录后投票
   发表时间:2009-03-13  
sea7 写道
lobbychmd 写道
思考方式不一样.俺现在也比较习惯DataSet 的思考方式,因为用了很多年的sql .

但回想当初学数据库的时候也曾经有过辛苦理解的日子.


这根本不是什么思考方式不同的问题,lz根本就没有领域模型的概念!

严重同意2楼

跟lz扯领域模型之类的概念干嘛

适度设计,他习惯datatable,sql语句。
而且简单够用,由他去吧。

0 请登录后投票
   发表时间:2009-03-13  
sea7 写道
lobbychmd 写道
思考方式不一样.俺现在也比较习惯DataSet 的思考方式,因为用了很多年的sql .

但回想当初学数据库的时候也曾经有过辛苦理解的日子.


这根本不是什么思考方式不同的问题,lz根本就没有领域模型的概念!

严重同意2楼

datatable是面向劳动力和简易性的

orm是面向对象和工程学的
0 请登录后投票
   发表时间:2009-03-19  
ORM是为了更好的面向对象。ORM减轻了你对JDBC的封装。面向对象是为了什么?为了更好的维护。
ORM的优势是你可以用完全面向对象的方式思考。通过数据库自动生成可以把数据库设计放到最后。避免因为早期数据库设计不合理造成后期难以改动。
缓存和ORM没任何直接关系。现在的ORM帮我们封装了缓存调用,但是你JDBC也可以用缓存。
面向数据库和面向对象比,我没感到优势。如果是简单的项目,那面向对象可以通过ORM做得更加简单。复杂的就不用说了,二维关系表在表示复杂关系方面很难,到处是关联表,不利于人的理解。
0 请登录后投票
   发表时间:2009-03-21  
subwayline13 写道
魔力猫咪 写道
ORM是为了更好的面向对象。ORM减轻了你对JDBC的封装。面向对象是为了什么?为了更好的维护。
ORM的优势是你可以用完全面向对象的方式思考。通过数据库自动生成可以把数据库设计放到最后。避免因为早期数据库设计不合理造成后期难以改动。
缓存和ORM没任何直接关系。现在的ORM帮我们封装了缓存调用,但是你JDBC也可以用缓存。
面向数据库和面向对象比,我没感到优势。如果是简单的项目,那面向对象可以通过ORM做得更加简单。复杂的就不用说了,二维关系表在表示复杂关系方面很难,到处是关联表,不利于人的理解。


兄弟你处理过1000W以上的数据吗?OOP是你的信仰,我尊重好了,但是这个世界上还有其他的语言和思想,比如erlang。
唉.NET版块讨论JDBC,真让人沮丧。

说习惯了。是封装SQL。但是现在微软也在搞ORM。还有,不要动不动就那大数据压人。什么数据量大就不能ORM、不能遵守范式,必须冗余等等。ORM的效率可以用缓存补充,而且很多框架提供了你可以自己定制ORM的SQL,而且还有缓存帮助你减轻压力。很多性能问题都是设计问题和SQL编写问题造成的。不要发现速度慢就怪到框架上,先应该检查一下SQL语句和设计。
0 请登录后投票
   发表时间:2009-03-22  
魔力猫咪 写道
ORM是为了更好的面向对象。ORM减轻了你对JDBC的封装。面向对象是为了什么?为了更好的维护。
ORM的优势是你可以用完全面向对象的方式思考。通过数据库自动生成可以把数据库设计放到最后。避免因为早期数据库设计不合理造成后期难以改动。
缓存和ORM没任何直接关系。现在的ORM帮我们封装了缓存调用,但是你JDBC也可以用缓存。
面向数据库和面向对象比,我没感到优势。如果是简单的项目,那面向对象可以通过ORM做得更加简单。复杂的就不用说了,二维关系表在表示复杂关系方面很难,到处是关联表,不利于人的理解。


ORM是为了更好的面向对象.这句话的依据何在?这是个逻辑错误.实际上,为了体现所谓的面向对象,才硬要把原本根本不属于对象范畴的东西生生变成对象.具体来说,数据就是数据,根本不是什么对象,但对于许多面向对象的信徒而言,死活不肯承认这一个基本事实,于是他们就发明了这样一个名词,ORM,把数据强制性变成一个所谓的对象,而实际上这个对象是很奇怪的,没有任何有价值的方法,而且所有这些对象都长的一个样子...
ORM没有减轻JDBC的封装,相反,是基于JDBC的封装.
面向对象不是为了更好的维护,这个出发点是错误的.面向对象的根本目的,是为了提高开发者,使用者,维护者对系统本身的理解,更好的掌握系统本身.
完全面向对象的方式思考,本身就是一个不存在的状态.数据本身是朴实的,没有任何的方法和状态.如果硬要把它当成对象,就是一个不伦不类的对象.
至于自动生成数据库,在实践中根本是行不通的.
二维关系表表示复杂关系很难,不利于理解,这个是事实,但采用ORM并不能解决这个问题.
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics