关于 DAO 接口设计的思考

来源:互联网 发布:时时动态数据展现工具 编辑:程序博客网 时间:2024/04/25 04:30
 

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

 

设计一:

Java代码

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);  

} 

 

设计二:

 

Java代码

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的设计原则。

 

解决方案

 

Java代码

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);  

}