精华帖 (0) :: 良好帖 (0) :: 新手帖 (18) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2009-03-13
不管我们用的是hibernate还是nhibernate,在从数据库返回了数据之后,我们总是需要自己去构建模型层。不可否认,自己构建模型层的结构,确实更大程度上的把开发的主动权控制在了我们程序员的手中,但是由此带来的不便也是显而易见的。如果我们使用ADO.NET,那么我们在处理返回的dataset的时候,其已经对里面的datatable构建好了。省去了我们对模型层字段的设置和配置,我们只需要知道数据库返回的是什么字段,在做数据绑定的时候,对应这个字段就行了。对字段的类型所关心的很少,我们有更多的时间来关心业务上的问题。 但是,当我们用Nhibernate的时候,模型层需要我们自己去构建domain和dto,这个本身就花费了我们大部分的时间。而且我从网上查了一些资料,其实nhibernate的实际效率并不比dataset要高哪里去。如果说仅仅是内存上的多占用的那部分,我相信这点内存我们还是支付的起的。但是,hibernate思维方式带给我们的麻烦事情还远没有结束。每当存储过程改变的时候,也就是从数据库返回的数据集的字段有所改变的时候,我们这个时候需要做的不仅仅是需要改变页面表现层的字段名,而且还要动domain或是dto的字段设置,尤其是字段类型。这些都是相当繁琐,而且增加了程序员犯错的机会,降低了开发的速度。 不可否认,MS把这些东西都给我们封装的太完美了,而完美如果非要说“挣脱MS的枷锁,做自己开发的主人”这种话,什么都自己去做的话,也是会付出很大的代价的。别人有好的东西,我们还是应该承认。 抛砖引玉。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-03-13
你实际上是纯面向数据库思考。你脑子里根本没有领域模型的概念。你的认知里所有的数据都是关系表而不是对象。结果项目领域模型变化的时候,你也只愿意改数据库。而根本没有想到其实应该先变化的是Domain,因为Domain的变化,所以数据库才要变化。整个一个本末倒置。
而且你们使用的是纯面向数据库开发。所有的业务逻辑都封到存储过程里头了。在这种开发模式下ORM框架根本不能发挥其优势。如果要发挥ORM的优势,必须面向对象开发。不是用了支持类的语言就是面向对象。 |
|
返回顶楼 | |
发表时间:2009-03-13
最后修改:2009-03-13
hibernate的核心是oop
dto层和dao层我们一般用工具生成 如果你要简单方便的话,datatable的机制已经足够了 spring.net+nhibernate还是不错的~~ 但是他们的point不在你说的这些地方~~ |
|
返回顶楼 | |
发表时间:2009-03-13
思考方式不一样.俺现在也比较习惯DataSet 的思考方式,因为用了很多年的sql .
但回想当初学数据库的时候也曾经有过辛苦理解的日子. |
|
返回顶楼 | |
发表时间:2009-03-13
lobbychmd 写道 思考方式不一样.俺现在也比较习惯DataSet 的思考方式,因为用了很多年的sql .
但回想当初学数据库的时候也曾经有过辛苦理解的日子. 这根本不是什么思考方式不同的问题,lz根本就没有领域模型的概念! 严重同意2楼 |
|
返回顶楼 | |
发表时间:2009-03-13
sea7 写道 lobbychmd 写道 思考方式不一样.俺现在也比较习惯DataSet 的思考方式,因为用了很多年的sql .
但回想当初学数据库的时候也曾经有过辛苦理解的日子. 这根本不是什么思考方式不同的问题,lz根本就没有领域模型的概念! 严重同意2楼 跟lz扯领域模型之类的概念干嘛 适度设计,他习惯datatable,sql语句。 而且简单够用,由他去吧。 |
|
返回顶楼 | |
发表时间:2009-03-13
sea7 写道 lobbychmd 写道 思考方式不一样.俺现在也比较习惯DataSet 的思考方式,因为用了很多年的sql .
但回想当初学数据库的时候也曾经有过辛苦理解的日子. 这根本不是什么思考方式不同的问题,lz根本就没有领域模型的概念! 严重同意2楼 datatable是面向劳动力和简易性的 orm是面向对象和工程学的 |
|
返回顶楼 | |
发表时间:2009-03-19
ORM是为了更好的面向对象。ORM减轻了你对JDBC的封装。面向对象是为了什么?为了更好的维护。
ORM的优势是你可以用完全面向对象的方式思考。通过数据库自动生成可以把数据库设计放到最后。避免因为早期数据库设计不合理造成后期难以改动。 缓存和ORM没任何直接关系。现在的ORM帮我们封装了缓存调用,但是你JDBC也可以用缓存。 面向数据库和面向对象比,我没感到优势。如果是简单的项目,那面向对象可以通过ORM做得更加简单。复杂的就不用说了,二维关系表在表示复杂关系方面很难,到处是关联表,不利于人的理解。 |
|
返回顶楼 | |
发表时间: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语句和设计。 |
|
返回顶楼 | |
发表时间:2009-03-22
魔力猫咪 写道 ORM是为了更好的面向对象。ORM减轻了你对JDBC的封装。面向对象是为了什么?为了更好的维护。
ORM的优势是你可以用完全面向对象的方式思考。通过数据库自动生成可以把数据库设计放到最后。避免因为早期数据库设计不合理造成后期难以改动。 缓存和ORM没任何直接关系。现在的ORM帮我们封装了缓存调用,但是你JDBC也可以用缓存。 面向数据库和面向对象比,我没感到优势。如果是简单的项目,那面向对象可以通过ORM做得更加简单。复杂的就不用说了,二维关系表在表示复杂关系方面很难,到处是关联表,不利于人的理解。 ORM是为了更好的面向对象.这句话的依据何在?这是个逻辑错误.实际上,为了体现所谓的面向对象,才硬要把原本根本不属于对象范畴的东西生生变成对象.具体来说,数据就是数据,根本不是什么对象,但对于许多面向对象的信徒而言,死活不肯承认这一个基本事实,于是他们就发明了这样一个名词,ORM,把数据强制性变成一个所谓的对象,而实际上这个对象是很奇怪的,没有任何有价值的方法,而且所有这些对象都长的一个样子... ORM没有减轻JDBC的封装,相反,是基于JDBC的封装. 面向对象不是为了更好的维护,这个出发点是错误的.面向对象的根本目的,是为了提高开发者,使用者,维护者对系统本身的理解,更好的掌握系统本身. 完全面向对象的方式思考,本身就是一个不存在的状态.数据本身是朴实的,没有任何的方法和状态.如果硬要把它当成对象,就是一个不伦不类的对象. 至于自动生成数据库,在实践中根本是行不通的. 二维关系表表示复杂关系很难,不利于理解,这个是事实,但采用ORM并不能解决这个问题. |
|
返回顶楼 | |