论坛首页 Java企业应用论坛

关于重复代码的存在是否合理的判定

浏览 5665 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-05-25  
SunMicro 写道
根据CRUD,一般我会在DAO里面创建insert,findBy*,update,delete等方法,而在业务逻辑层,我以DAO为根据来划分相应的子程序,但这个时候常常会出现重复的代码。

比如:

我会在一个MultiActionController里面分别定义insert,update,find,delete四个方法,这四个方法是与DAO完全对应的,但insert和update基本上是重复的,唯一的不同就是insert是新生成id,而update时,id是从post数据获得。但我都是insert(Model),update(Model),连model的封装都是一模一样的,完全没有区别。有时後我想是否可以将insert和update合并,然后通过判断post数据是否存在id来决定事添加新数据还是修改已有数据。又或则本身这样的重复是可以接受的呢?

除了上面的情况,实际开发中还会有很多会机会面对这个问题,但感觉如果通过合并来减少重复,那么削除重复代码就会导致方法的粒度较粗,可能在以后的重构或是扩展上面增加难度。


遇到这样的情况,该如何去设计呢?


我一般情况就是写一个Save方法
1.通过判断是否有id来决定是insert还是update,(但是在有些设计中id不是由系统自动生成的,这种方法就不行了)
2.在页面做一个隐藏域的标志,以此来判断是insert还是update!
3.把从页面装配参数成model的过程重构成一个私有方法!

重复代码肯定是有必要去消除滴!!!
0 请登录后投票
   发表时间:2007-06-14  
很多时候,大家有可能把DAO模式想的太复杂了,也有很多的衍生实现。但DAO模式本身的特点就是对对象访问的桥,这种设计本身就决定了DAO自身的缺陷和复杂性。

个人观点。
0 请登录后投票
   发表时间:2007-06-14  
SunMicro 写道
是否是指在有Hibernate等持久层框架的前提下?或是让域对象具有持久化逻辑。

  目前项目中的持久层框架是ibatis,仍然在使用Dao interface+Dao impl这种形式。



域对象为什么要具有本不属于它的责任范围的功能呢?
0 请登录后投票
   发表时间:2007-06-14  
Hibernate里面有saveOrUpdate方法,ibatis没有吗?
0 请登录后投票
论坛首页 Java企业应用版

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