【问题标题】:Creating a default DAO interface创建默认 DAO 接口
【发布时间】:2015-10-29 13:07:46
【问题描述】:

我想知道创建默认 DAO 接口而不是为每个类创建自己的接口是否是一种好习惯。

public interface DAO {

    public void addItem();
    public void updateItem();
    public void removeItem();
    public Object getItem(int id);
    public Object[] getAll();
}

现在我们可以通过多个类来实现这个接口。当然,这个解决方案有它的缺点,比如在检索数据期间向下转换,但我认为它仍然更有效并且代码更清晰。这是一个好方法吗?

【问题讨论】:

  • 没有。你刚刚失去了类型安全。

标签: java dao


【解决方案1】:

这是一个很好的方法,但使用泛型至少可以完成一个改进:

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 至少都有这些方法。否则会导致更复杂的情况。此外,如果有一些 DAO 恰好具有这些方法,那么您最终会得到非常紧凑的干净代码,例如:

public interface UserDAO extends DAO<User> {
    // And that is basically it :)
}

public class UserDAOImpl implements UserDAO {
    // Your implementations here
    // ...
}

注意:我已将 Object[] 替换为 List&lt;T&gt; 而不是 T[],因为在泛型的情况下您不能这样做。但这不是缺点,最好使用内置容器。

【讨论】:

  • 是的,我搞砸了数组。我并不是要在列表上使用数组。
【解决方案2】:

没有。遵循以下结构将是干净的。

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

【讨论】:

    【解决方案3】:

    我不会这样做。如果您有一个只能从中读取的表(可能是其他一些模块/程序/等对其进行了更新?或者只是您想手动设置一次然后忘记的一些设置?)。或者,如果您希望能够从同一张表中获取多个项目(也许您只需要某些事物的 id 和其他事物的完整对象)?虽然它可能更容易编写,但我认为接口 DAO 更难使用。

    我也不认为可读性更好。 CarDAO.getItem(123)CarDAO.getCarById(123) 告诉你的要少得多。如果您想通过其他方式获得 Cars,您不必超载它(是的,您可以只制作界面中没有的东西,但界面的好处会更小)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-03
      • 1970-01-01
      • 2021-11-21
      • 1970-01-01
      • 2016-05-06
      • 2018-09-17
      • 1970-01-01
      相关资源
      最近更新 更多