了解 DAO 模式和接口

Posted

技术标签:

【中文标题】了解 DAO 模式和接口【英文标题】:Understanding DAO-pattern and interfaces 【发布时间】:2016-01-26 15:32:48 【问题描述】:

我正在阅读J. Bloch的有效Java,他说的是:

一旦一个接口被发布并被广泛实现,它几乎 无法改变。

所以,现在考虑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-interfaces 可能或多或少是稳定的,因为添加一些新的DAO-操作经常发生。

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

【问题讨论】:

您可以从界面中删除 public 关键字,因为它们是多余的。 【参考方案1】:

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

想象一下您创建了一个公共 API 来让任何程序员都可以使用您的平台。如果您要更改该接口,则需要程序员调整他的代码,因此这将令人沮丧。

但是,如果您为内部应用创建界面,则无需承担风险,根据需要改进界面是值得的。

显然,您必须考虑有多少类实现了您的接口并承担修改成本。

【讨论】:

我认为 J. Bloch 的这句话是针对公共接口的。 同意。项目中的内部接口一直在变化。

以上是关于了解 DAO 模式和接口的主要内容,如果未能解决你的问题,请参考以下文章

DAO

设计模式重新理解简单工厂模式工厂模式抽象工厂模式

了解 Spring Data 接口

面向对象编程和DAO设计模式

求对hibernate源码了解的大神!关于hibernate4及以上版本---不配置事务,dao类继承自HibernateDaoSupport

DAO 模式 - 它提供业务对象还是纯数据?