【发布时间】:2023-03-07 16:08:01
【问题描述】:
查看一些 JPA 代码,我明白了:
public interface Dao<T extends DomainObject>
public interface EventDao extends Dao<Event> - nothing added to Dao<Event>
public abstract class AbstractDaoJPAImpl<T extends DomainObject> extends JpaDaoSupport implements Dao<T>
public class EventDaoJPAImp extends AbstractDaoJPAImpl<Event> implements EventDao
为什么需要这两个接口?为什么不简单
public abstract class AbstractDao<T extends DomainObject> extends JpaDaoSupport
public class EventDao extends AbstractDaoJPAImpl<Event>
我来自 Ruby on Rails 世界,那里的事情看起来更简单。我很肯定这种 Java 方法有很多优点。我经常能意识到什么时候应该使用接口,但有时我会感觉到 Java 开发人员对接口疯狂。
【问题讨论】:
-
您正在混合 JPA 和 DAO 概念。 JPA != DAO。它们可以一起使用,但 JPA 通常被视为 DAO 的替代品,因为 JPA 由 标准 支持。相关:stackoverflow.com/questions/3818589/…
-
先搞清楚JPA本身是什么,再发一个真实的问题
-
实际上,您需要一个 DAO 接口,以便您可以轻松地将一种实现切换到另一种实现(例如模拟 dao 的单元测试......)。您还可以轻松地执行切换 dao 实现之类的操作,以将负载测试结果与不同的 dao 集或类似的东西进行比较......并且您使用通用接口来避免必须将所有基本的 crud 方法添加到所有非通用 dao 接口