关于 DAO 接口设计的思考
需求: 现在要设计 3 个 DAO 分对 Wind, Horse, Cow 进行增、删、改以及一些其他操作。
设计一:
设计二:
疑惑:
采用设计一: 发现增、删、改 这些方法重复了。
采用设计二: 发现 WindDao 不但可以对 Wind 进行增、删、改操作,
而且可以对其他任意对象进行增、删、改操作。似乎违反了OO的设计原则。
设计一:
- 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的设计原则。
- 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);
- }