最近在做.NET平台上C#+SPRING.NET+Nhibernate的开发,之前一直在做.NET+SQL SERVER2005的开发,这里对比两者的差异,发表一些观点
不管我们用的是hibernate还是nhibernate,在从数据库返回了数据之后,我们总是需要自己去构建模型层。不可否认,自己构建模型层的结构,确实更大程度上的把开发的主动权控制在了我们程序员的手中,但是由此带来的不便也是显而易见的。如果我们使用ADO.NET,那么我们在处理返回的dataset的时候,其已经对里面的datatable构建好了。省去了我们对模型层字段的设置和配置,我们只需要知道数据库返回的是什么字段,在做数据绑定的时候,对应这个字段就行了。对字段的类型所关心的很少,我们有更多的时间来关心业务上的问题。
但是,当我们用Nhibernate的时候,模型层需要我们自己去构建domain和dto,这个本身就花费了我们大部分的时间。而且我从网上查了一些资料,其实nhibernate的实际效率并不比dataset要高哪里去。如果说仅仅是内存上的多占用的那部分,我相信这点内存我们还是支付的起的。但是,hibernate思维方式带给我们的麻烦事情还远没有结束。每当存储过程改变的时候,也就是从数据库返回的数据集的字段有所改变的时候,我们这个时候需要做的不仅仅是需要改变页面表现层的字段名,而且还要动domain或是dto的字段设置,尤其是字段类型。这些都是相当繁琐,而且增加了程序员犯错的机会,降低了开发的速度。
不可否认,MS把这些东西都给我们封装的太完美了,而完美如果非要说“挣脱MS的枷锁,做自己开发的主人”这种话,什么都自己去做的话,也是会付出很大的代价的。别人有好的东西,我们还是应该承认。
抛砖引玉。
不管我们用的是hibernate还是nhibernate,在从数据库返回了数据之后,我们总是需要自己去构建模型层。不可否认,自己构建模型层的结构,确实更大程度上的把开发的主动权控制在了我们程序员的手中,但是由此带来的不便也是显而易见的。如果我们使用ADO.NET,那么我们在处理返回的dataset的时候,其已经对里面的datatable构建好了。省去了我们对模型层字段的设置和配置,我们只需要知道数据库返回的是什么字段,在做数据绑定的时候,对应这个字段就行了。对字段的类型所关心的很少,我们有更多的时间来关心业务上的问题。
但是,当我们用Nhibernate的时候,模型层需要我们自己去构建domain和dto,这个本身就花费了我们大部分的时间。而且我从网上查了一些资料,其实nhibernate的实际效率并不比dataset要高哪里去。如果说仅仅是内存上的多占用的那部分,我相信这点内存我们还是支付的起的。但是,hibernate思维方式带给我们的麻烦事情还远没有结束。每当存储过程改变的时候,也就是从数据库返回的数据集的字段有所改变的时候,我们这个时候需要做的不仅仅是需要改变页面表现层的字段名,而且还要动domain或是dto的字段设置,尤其是字段类型。这些都是相当繁琐,而且增加了程序员犯错的机会,降低了开发的速度。
不可否认,MS把这些东西都给我们封装的太完美了,而完美如果非要说“挣脱MS的枷锁,做自己开发的主人”这种话,什么都自己去做的话,也是会付出很大的代价的。别人有好的东西,我们还是应该承认。
抛砖引玉。