问题集锦之关于DAO接口设计的思考

需求: 现在要设计 3 个 DAO 分对 Wind, Horse, Cow 进行增、删、改以及一些其他操作。

设计一:

代码
  1. Public interface WindDao {   
  2.     public void create(Wind obj);   
  3.     public void delete(Wind obj);   
  4.     public void update(Wind obj);   
  5.   
  6.     public void other(Wind obj);   
  7. }   
  8.   
  9. Public interface HorseDao {   
  10.     public void create(Horse obj);   
  11.     public void delete(Horse obj);   
  12.     public void update(Horse obj);   
  13.   
  14.     public void other(Horse obj);   
  15. }   
  16.   
  17. Public interface CowDao {   
  18.     public void create(Cow obj);   
  19.     public void delete(Cow obj);   
  20.     public void update(Cow obj);   
  21.   
  22.     public void other(Horse obj);   
  23. }   

<script>render_code();</script>

 

设计二:

 

代码
  1. Public interface BaseDao {   
  2.     public void create(Object obj);   
  3.     public void delete(Object obj);   
  4.     public void update(Object obj);   
  5. }   
  6.   
  7. Public interface WindDao extends BaseDao {   
  8.     public void other(Wind obj);   
  9. }   
  10.   
  11. Public interface HorseDao extends BaseDao {   
  12.     public void other(Horse obj);   
  13. }   
  14.   
  15. Public interface CowDao extends BaseDao {   
  16.     public void other(Horse obj);   
  17. }   

<script>render_code();</script>

 

疑惑:
采用设计一: 发现增、删、改 这些方法重复了。
采用设计二: 发现 WindDao 不但可以对 Wind 进行增、删、改操作,
而且可以对其他任意对象进行增、删、改操作。似乎违反了OO的设计原则。

各位大侠, 应该如何设计会比较合适些 ?

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

回答:

代码
  1. public interface BaseDao<t></t> {   
  2.     public void create (T t);   
  3.     public void delete (T t);   
  4.     public void update (T t);   
  5. }   
  6.   
  7. public interface WindDao extends BaseDao<wind></wind> {   
  8.     public void other (Wind wind);   
  9. }   

 

public interface BaseDao<t></t> {
public void create (T t);
public void delete (T t);
public void update (T t);
}

public interface WindDao extends BaseDao<wind></wind> {
public void other (Wind wind);
} 我也喜欢这种方式

----------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

反射的话应该也可以,不是这种类型的就抛个异常出来,不过这样的话,每个DAO实现都要重复判断,所以最好写一个基类把这些东西放在基类里面,to楼上的几位,不是什么项目都可以用5.0的.

反射虽然可以, 但是用反射性能比较低,我觉得如非必要最好还是不要用反射。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值