精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2004-12-07
gigix 写道 我现在做东西常常没有DAO,毕竟hibernate已经把数据存取简化到相当简单了。比如我最近做的一个东西,管理用户相关的信息就一个UserManagerHibernateImpl,看名字就知道是怎么回事:实现UserManager接口,继承HibernateDAOSupport类。这个类我还打算要换实现的,回头可能做一个UserManagerHessianImpl,我考虑做几个Template Method或者再加上一层DAO。如果是不太可能换实现,一定是走关系数据库,基本上这样就够用了。像楼主做的贫血DAO,我觉得还不如不要。
gigix不你知道你在领域对象中怎么实现数据访问得,记得你好像也是支持把业务逻辑放在domain object的吧。 |
|
返回顶楼 | |
发表时间:2004-12-07
flyingbug 写道 不同意Gigix把DAO做成那么薄的一层,DAO的目的就是隐藏数据访问细节不是吗?那么写HQL意义何在呢?
Spring+Hibernate的DAO的模板可以使用Hibernate Synchronizer来生成,如果对velocity比较熟悉的话(Hibernate Synchronizer是使用velocity来做模板的),可以自己修改一下Hibernate Synchronizer的模板文件来更改生成 不知道为什么这里的人都对Hibernate Synchronizer没什么兴趣,我觉得挺好用的,它基于模板的代码生成很方便,而且还能生成DAO,如果模板方法配置的好,DAO层几乎不用编码 我在这里发的更改Hibernate Synchronizer的模板来自动生成Spring+Hibernate的文章都没有人回:( Hibernate Synchronizer 是我非常喜欢的插件,不过我不让她生成垃圾的dao,我宁愿实现一个通用的dao。我非常喜欢她生成po层次,她能够使得我非常方便的在po放入领域逻辑。我现在做ood时候从不考虑如何持久数据,也不会设计出什么xxxDao出来 用 Hibernate Synchronizer并不影响从对象设计出发的思维 |
|
返回顶楼 | |
发表时间:2004-12-07
gigix 写道 我现在做东西常常没有DAO,毕竟hibernate已经把数据存取简化到相当简单了。比如我最近做的一个东西,管理用户相关的信息就一个UserManagerHibernateImpl,看名字就知道是怎么回事:实现UserManager接口,继承HibernateDAOSupport类。这个类我还打算要换实现的,回头可能做一个UserManagerHessianImpl,我考虑做几个Template Method或者再加上一层DAO。如果是不太可能换实现,一定是走关系数据库,基本上这样就够用了。像楼主做的贫血DAO,我觉得还不如不要。
那这个UserManagerHibernateImpl不还是个DAO嘛,只不过名字没有取成 XXDAO |
|
返回顶楼 | |
发表时间:2004-12-08
flyingbug 写道 不同意Gigix把DAO做成那么薄的一层,DAO的目的就是隐藏数据访问细节不是吗?那么写HQL意义何在呢?
如果数据访问的细节本身就很少,如果数据访问本身就不大可能变化,我当然可以把它融合在业务逻辑层里面。等真正出现变化了,需要封装数据访问了,再来重构出一个DAO层嘛。 flyingbug 写道 Spring+Hibernate的DAO的模板可以使用Hibernate Synchronizer来生成,如果对velocity比较熟悉的话(Hibernate Synchronizer是使用velocity来做模板的),可以自己修改一下Hibernate Synchronizer的模板文件来更改生成
我宁可少一个层次,也不愿代码生成。这可以看作一种个人偏好。 |
|
返回顶楼 | |
发表时间:2004-12-08
如果数据访问的细节比较简单,我认为DAO和业务逻辑是可以放在一起的,毕竟事事无绝对。不是说一定要有DAO这样一个层次。
如果一定要将DAO作为一个层次,我赞同楼主的做法,不过不是完全赞同。我会写一些公用的操作作为一个BaseDAO,但是BaseDAO并不暴露给业务逻辑,而暴露给业务逻辑的是UserDAO,XXXDAO......这些DAO继承BaseDAO接口,这样至少可以简化DAO中的很多方法的数量。 |
|
返回顶楼 | |
发表时间:2004-12-08
另外,我不赞同代码生成,这常常为以后的程序调试带来不便。因为毕竟代码生成出来,你不可能一点也不做修改,有这点读代码的时间,早就自己写好了。另外就是代码生成限制了你的思路,万一你觉得某些地方可以去掉一个层次或者不需要它生成,还要去删除,累不累啊?
|
|
返回顶楼 | |
发表时间:2004-12-08
gigix 写道 如果数据访问的细节本身就很少,如果数据访问本身就不大可能变化,我当然可以把它融合在业务逻辑层里面。等真正出现变化了,需要封装数据访问了,再来重构出一个DAO层嘛。 呵呵,这个倒是,可能是我没遇到这种细节较少的吧 所以觉得不这么做会改起来很烦 |
|
返回顶楼 | |
发表时间:2004-12-08
downpour 写道 另外,我不赞同代码生成,这常常为以后的程序调试带来不便。因为毕竟代码生成出来,你不可能一点也不做修改,有这点读代码的时间,早就自己写好了。另外就是代码生成限制了你的思路,万一你觉得某些地方可以去掉一个层次或者不需要它生成,还要去删除,累不累啊?
你说的那种是自己制作代码生成器带来的烦恼,如果是集成到平台上,可以做很多更灵活的事情,Eclipse就提供了这样一个平台 我原来也不喜欢用代码生成器,但是Hibernate Sync的以下功能让我觉得很方便 HS的代码生成提供了四个层次,其中两个层次是给DAO程序员做修改的(空继承类) 给DAO程序员做修改的单独放在一个包中 而且生成的时候,可以选择生成但不overwrite,这样已修改过的可以不被覆盖 |
|
返回顶楼 | |
发表时间:2004-12-08
Jolin 写道 Hibernate Synchronizer 是我非常喜欢的插件,不过我不让她生成垃圾的dao,我宁愿实现一个通用的dao。我非常喜欢她生成po层次,她能够使得我非常方便的在po放入领域逻辑。我现在做ood时候从不考虑如何持久数据,也不会设计出什么xxxDao出来 用 Hibernate Synchronizer并不影响从对象设计出发的思维
我就是想让它来生成你说的那个通用的dao,我想所谓通用,每个人的理解也都不一样吧 所以我把我的方法发到这里,希望能有人针对我的代码给提提意见 另外,这个跟OOD没有太大的关系吧,这个是实现的方式,实际上在OOD的时候,我们只是说有这么一个持久层接口,我把需要持久的数据发给这个接口就好了,至于如何实现我就不管了 而我们在这里说的不就是如何实现的问题吗?所以无论是OOD还是O什么D对我们现在说的这个问题都没有影响 |
|
返回顶楼 | |
发表时间:2004-12-08
downpour 写道 如果数据访问的细节比较简单,我认为DAO和业务逻辑是可以放在一起的,毕竟事事无绝对。不是说一定要有DAO这样一个层次。
如果一定要将DAO作为一个层次,我赞同楼主的做法,不过不是完全赞同。我会写一些公用的操作作为一个BaseDAO,但是BaseDAO并不暴露给业务逻辑,而暴露给业务逻辑的是UserDAO,XXXDAO......这些DAO继承BaseDAO接口,这样至少可以简化DAO中的很多方法的数量。 你这个方式和Hibernate Sync里面产生的继承体系一摸一样 不明白你为什么说不喜欢它?? |
|
返回顶楼 | |