锁定老帖子 主题:关于 DAO 接口设计的思考
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2006-10-11
设计一: Public interface WindDao { public void create(Wind obj); public void delete(Wind obj); public void update(Wind obj); public void other(Wind obj); } Public interface HorseDao { public void create(Horse obj); public void delete(Horse obj); public void update(Horse obj); public void other(Horse obj); } Public interface CowDao { public void create(Cow obj); public void delete(Cow obj); public void update(Cow obj); public void other(Horse obj); } 设计二: Public interface BaseDao { public void create(Object obj); public void delete(Object obj); public void update(Object obj); } Public interface WindDao extends BaseDao { public void other(Wind obj); } Public interface HorseDao extends BaseDao { public void other(Horse obj); } Public interface CowDao extends BaseDao { public void other(Horse obj); } 疑惑: 采用设计一: 发现增、删、改 这些方法重复了。 采用设计二: 发现 WindDao 不但可以对 Wind 进行增、删、改操作, 而且可以对其他任意对象进行增、删、改操作。似乎违反了OO的设计原则。 各位大侠, 应该如何设计会比较合适些 ? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2006-10-11
public interface BaseDao<T> { public void create (T t); public void delete (T t); public void update (T t); } public interface WindDao extends BaseDao<Wind> { public void other (Wind wind); } |
|
返回顶楼 | |
发表时间:2006-10-11
对。就是用1.5的泛型,我经常也这么干
|
|
返回顶楼 | |
发表时间:2006-10-12
嗯,好主意 !
非常感谢各位的回复. |
|
返回顶楼 | |
发表时间:2006-10-12
第一次见这种写法,我也试试
|
|
返回顶楼 | |
发表时间:2006-10-12
除了用泛型,用反射可以吗???
|
|
返回顶楼 | |
发表时间:2006-10-12
反射的话应该也可以,不是这种类型的就抛个异常出来,不过这样的话,每个DAO实现都要重复判断,所以最好写一个基类把这些东西放在基类里面,to楼上的几位,不是什么项目都可以用5.0的
|
|
返回顶楼 | |
发表时间:2006-10-13
反射虽然可以, 但是用反射性能比较低,我觉得如非必要最好还是不要用反射。
|
|
返回顶楼 | |
发表时间:2006-10-13
不是jdk1.5就不好解决这些问题,哪个解决反感都有点毛病
|
|
返回顶楼 | |
发表时间:2006-10-13
刑天战士 写道 反射的话应该也可以,不是这种类型的就抛个异常出来,不过这样的话,每个DAO实现都要重复判断,所以最好写一个基类把这些东西放在基类里面,to楼上的几位,不是什么项目都可以用5.0的
如果不能用5.0,就用设计一。我的设计可以看成是用模板简化了设计一。WindDao和HorseDao等操作的对象是不一样的,所以不能因为方法名一样,就认为是重复的操作。 设计二什么时候有价值?如果有程序只需要依赖BaseDao,而不需要依赖具体实体类的DAO接口,BaseDao就有价值了。 |
|
返回顶楼 | |