了解 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 设计灾难,或者接口几乎不适合 DAO
s?
我认为 J. Bloch 的那句话是针对 public 接口的,而不是针对您的 DAO 案例。
想想你创建一个 public API 让任何程序员使用你的平台。如果你要改变那个界面,你就是在要求程序员调整他的代码,所以这会令人沮丧。
但是,如果您是为内部应用程序创建界面,则不会承担这种风险,值得根据需要改进界面。
显然你要考虑有多少类实现你的接口并承担修改的成本。
我正在阅读 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 设计灾难,或者接口几乎不适合 DAO
s?
我认为 J. Bloch 的那句话是针对 public 接口的,而不是针对您的 DAO 案例。
想想你创建一个 public API 让任何程序员使用你的平台。如果你要改变那个界面,你就是在要求程序员调整他的代码,所以这会令人沮丧。
但是,如果您是为内部应用程序创建界面,则不会承担这种风险,值得根据需要改进界面。
显然你要考虑有多少类实现你的接口并承担修改的成本。