了解 DAO 模式和接口

Understanding DAO-pattern and interfaces

我正在阅读 J. Bloch 的有效 Java 他说了以下内容:

Once an interface is released and widely implemented, it is almost impossible to change.

所以,现在考虑 DAO-pattern 的简单界面:

public interface UserDao{

    public User getById(int id);

    public Collection<User> getAll();

    public boolean delete(int userId);

    public boolean update(User u);

}

这是我的 Dao 界面首次发布时的样子。到那时,我不得不向用户添加一些功能,以便通过其 registration_date 或类似的东西聚合所有用户。所以,我需要在DAO接口中添加相应的方法声明并实现它。

此外,现在我无法想象 DAO-接口可能或多或少是稳定的,因为添加一些新的 DAO-操作经常发生。

也许是我的 DAO 设计灾难,或者接口几乎不适合 DAOs?

我认为 J. Bloch 的那句话是针对 public 接口的,而不是针对您的 DAO 案例。

想想你创建一个 public API 让任何程序员使用你的平台。如果你要改变那个界面,你就是在要求程序员调整他的代码,所以这会令人沮丧。

但是,如果您是为内部应用程序创建界面,则不会承担这种风险,值得根据需要改进界面。

显然你要考虑有多少类实现你的接口并承担修改的成本。