锁定老帖子 主题:关于重复代码的存在是否合理的判定
精华帖 (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的过程重构成一个私有方法! 重复代码肯定是有必要去消除滴!!! |
|
返回顶楼 | |
发表时间:2007-06-14
很多时候,大家有可能把DAO模式想的太复杂了,也有很多的衍生实现。但DAO模式本身的特点就是对对象访问的桥,这种设计本身就决定了DAO自身的缺陷和复杂性。
个人观点。 |
|
返回顶楼 | |
发表时间:2007-06-14
SunMicro 写道 是否是指在有Hibernate等持久层框架的前提下?或是让域对象具有持久化逻辑。
目前项目中的持久层框架是ibatis,仍然在使用Dao interface+Dao impl这种形式。 域对象为什么要具有本不属于它的责任范围的功能呢? |
|
返回顶楼 | |
发表时间:2007-06-14
Hibernate里面有saveOrUpdate方法,ibatis没有吗?
|
|
返回顶楼 | |