Java 创建默认DAO接口
我想知道创建默认DAO接口而不是为每个类创建自己的接口是否是一个好的实践Java 创建默认DAO接口,java,dao,Java,Dao,我想知道创建默认DAO接口而不是为每个类创建自己的接口是否是一个好的实践 public interface DAO { public void addItem(); public void updateItem(); public void removeItem(); public Object getItem(int id); public Object[] getAll(); } 现在我们可以通过多个类来实现这个接口。当然,这种解决方案有它的缺点,
public interface DAO {
public void addItem();
public void updateItem();
public void removeItem();
public Object getItem(int id);
public Object[] getAll();
}
现在我们可以通过多个类来实现这个接口。当然,这种解决方案有它的缺点,比如在检索数据时向下投射,但我认为它仍然更有效,代码更清晰。这是一个好方法吗?这是一个好方法,但使用泛型至少可以实现一个改进:
public interface DAO<T> {
public void addItem(T item);
public void updateItem(T item);
public void removeItem(T item);
public T getItem(int id);
public List<T> getAll();
}
公共接口DAO{
公共无效附加项(T项);
公共作废更新项(T项);
公共无效清除项目(T项);
公共获取项(int-id);
公共列表getAll();
}
所以现在你不需要任何铸造。但无论如何,您必须确保所有DAO至少都有这些方法。否则,这将导致更多的复杂性。此外,如果有一些DAO正好包含这些方法,那么您将得到非常紧凑的干净代码,例如:
public interface UserDAO extends DAO<User> {
// And that is basically it :)
}
public class UserDAOImpl implements UserDAO {
// Your implementations here
// ...
}
公共接口UserDAO扩展了DAO{
//基本上就是这样:)
}
公共类UserDAOImpl实现UserDAO{
//您在这里的实现
// ...
}
注意:我已经用
List
替换了Object[]
,而不是T[]
,因为在泛型中不能这样做。但这不是缺点,最好使用内置容器。否。下面的结构将是干净的
interface DAO {
void insert();
void update();
Object read(Integer id);
void delete();
}
class DAOImpl implements DAO {
void insert(){}
void update(){}
Object read(Integer id){}
void delete(){}
}
class ItemDAO extends DAOImpl{
public void addItem(Item i){
insert(i);
}
public void updateItem(Item i){
update(i);
}
public void removeItem(Item i){
delete(i);
}
public Object getItem(int id){
read(id);
}
}
我不会这么做的。如果您有一个只从中读取的表(可能是其他模块/程序/etc更新了它?或者只是一些设置,您想手动设置一次,然后忘记?)。或者,如果您希望能够从同一个表中获取多个项(可能您只需要某些项的ID,而其他项则需要完整对象),该怎么办?虽然它可能更容易编写,但我认为接口DAO更难使用
我也不认为可读性更好
CarDAO.getItem(123)
告诉您的信息比CarDAO.getCarById(123)
少得多。如果你想通过其他方式获得汽车,你不必过多地使用它(是的,你可以制作一些界面上没有的东西,但是界面的好处更小)。不。你刚刚失去了类型安全性。是的,我把数组搞糟了。我不是想在列表上使用数组。