查看一些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开发人员会疯狂地接口。
答案 0 :(得分:2)
JPA不需要这些界面。
您在JPA中唯一需要的是您的实体定义,包括映射到数据库的注释。而已。管理数据库连接和实体存储的EntityManager已由JPA编写,您不需要所有这些接口和类。
他们可能是由开发人员编写的,他们认为它会分离数据库层(以及JPA给你的EntityManager)和应用程序的任何其他层。
如果那是好事还是坏事是另一个话题......
答案 1 :(得分:1)
使用界面可以定义合同。此契约在具体的EventDao类中实现。
使用此类DAO的业务服务通常会使用EventDao接口作为注入依赖项。这有几个好处: