论坛首页 Java企业应用论坛

为什么java里不能把域对象和DAO合并,rails里面就可以?

浏览 28948 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-03-02  
为什么rails里面大家都不反对继承ActiveRecord::Base让域对象具有持久化逻辑,
但在java里面基本上都反对,并且称为涨血?因为java缺少支持的框架?可以举例说明吗?
   发表时间:2007-03-02  
java中是为了保持业务对象的纯洁性,但是对于中小项目和快速开发的项目来说,太多的层会导致低效率。因此ActiveRecord用了Active Record模式,并利用动态语言的特点动态的添加方法来实现几乎0编程的数据库访问。java中目前也有这种,不过是通过元代码来实现,请看Appfuse和SpringSide
0 请登录后投票
   发表时间:2007-03-02  
fatzhen 写道
为什么rails里面大家都不反对继承ActiveRecord::Base让域对象具有持久化逻辑,
但在java里面基本上都反对,并且称为涨血?因为java缺少支持的框架?可以举例说明吗?


ROR的代码量少
所以多看点东西
java中的代码量大
所以放进去就看不清了....
0 请登录后投票
   发表时间:2007-03-02  
刑天战士 写道
java中目前也有这种,不过是通过元代码来实现,请看Appfuse和SpringSide


可以用更简单的办法吗?比如做个持久化的基类,让域对象继承,然后在service中开启事务(或者用框架申明)
以前我们是这样做,后来才改成纯洁的业务对象,但没感觉到好处...
0 请登录后投票
   发表时间:2007-03-02  
继承?
活回去了...
0 请登录后投票
   发表时间:2007-03-02  
fatzhen 写道
刑天战士 写道
java中目前也有这种,不过是通过元代码来实现,请看Appfuse和SpringSide


可以用更简单的办法吗?比如做个持久化的基类,让域对象继承,然后在service中开启事务(或者用框架申明)
以前我们是这样做,后来才改成纯洁的业务对象,但没感觉到好处...


这就要看你们项目的情况了,如果像论坛这种都是CRUD的操作,恐怕Active Record模式是个好选择,如果你们的业务复杂而且数据库访问策略变化较多,Domain Object模式还是不错的
0 请登录后投票
   发表时间:2007-03-02  
抛出异常的爱 写道
继承?
活回去了...


是以前的做法,有活回去的意思(当然持久化接口是必然写的)
现在看rails也这样做,就觉得这样也可以吧
现在大家用Spring,也很多人在用HibernateDaoSupport啊
0 请登录后投票
   发表时间:2007-03-02  
fatzhen 写道
为什么rails里面大家都不反对继承ActiveRecord::Base让域对象具有持久化逻辑,
但在java里面基本上都反对,并且称为涨血?因为java缺少支持的框架?可以举例说明吗?


我不反对这样做,事实上我是主张省略DAO的。我所有的Service都继承一个公用的BaseDao获得所有的持久化逻辑。也就是说DAO和Service是合并的。

AR可以看成是把Java的Service对象,DAO对象,domain对象三位一体了。但对于Java来说,Service合并DAO容易,但要Service再合并domain对象,对于Java目前的框架来说,存在很大的技术难度,使得这样做基本不现实。
1 请登录后投票
   发表时间:2007-03-02  
刑天战士 写道

这就要看你们项目的情况了,如果像论坛这种都是CRUD的操作,恐怕Active Record模式是个好选择,如果你们的业务复杂而且数据库访问策略变化较多,Domain Object模式还是不错的

那混用应该不错,Active Record的方式简化一些,很多时候可以用用;
看来纯洁的域对象不是必须的,以前是我自己斤斤计较了
0 请登录后投票
   发表时间:2007-03-02  
robbin 写道

AR可以看成是把Java的Service对象,DAO对象,domain对象三位一体了。但对于Java来说,Service合并DAO容易,但要Service再合并domain对象,对于Java目前的框架来说,存在很大的技术难度,使得这样做基本不现实。


AR好像并没有把Service对象一块合并
java里的Service要负责事务以及多个domain对象的协作,这些rails是放到controller去做的吧?
如果java里模仿这样的方式可以吗?
不过我觉得保留service比较好看

"java里的Service要负责事务以及多个domain对象的协作,这些rails是放到controller去做的吧?"
这个我看了一下typo的代码,发现事务是model里面有,controller里面也有,是不是容易混乱
0 请登录后投票
论坛首页 Java企业应用版

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