Java 为DAO创建接口是否合理,而我为服务创建了DAO?

Java 为DAO创建接口是否合理,而我为服务创建了DAO?,java,spring,design-patterns,architecture,Java,Spring,Design Patterns,Architecture,我们正在通过@Service和@Component注释使用Spring@Autowired修改一个新的面向服务的体系结构 我一直在和我的同事们讨论,为什么不为每个DAO提供接口。因为对我来说这没有任何意义,而我强烈支持为服务提供接口的事实,因为有一个自动连接的抽象视图 详情如下: 控制器(用户)

我们正在通过@Service和@Component注释使用Spring@Autowired修改一个新的面向服务的体系结构

我一直在和我的同事们讨论,为什么不为每个DAO提供接口。因为对我来说这没有任何意义,而我强烈支持为服务提供接口的事实,因为有一个自动连接的抽象视图

详情如下:

控制器(用户)<服务(接口)@Autowire注释

服务实现(实现服务)使用@Component或@Repository使用DAO


我对这种体系结构的理解是否正确,或者我是否遗漏了真正重要的体系结构概念。

我知道这似乎不太可能,但我曾经遇到过这样的情况:我想使用不同的存储技术实现DAO,或者因为性能问题而简单地使用JDBC而不是Hibernate


在大型应用程序中,一切都是一个界面。它使单元测试更加灵活,并为您提供更好的长期路径。成本只是一些额外的类,大多数IDE都会帮助您维护它们。

通过从服务中按接口引用DAO对象,您将拥有更易于编写测试的服务

如果您使用像JPA、Hibernate、MyBatis或其他支持DAO层的框架,那么您不需要任何DAO接口,因为服务可以直接访问这个DAO层。如果您不想或不想/需要定义行为和业务逻辑来定义访问、插入、更新、删除等。。。LuiggiMendoza:这绝对意味着完整,但正如我在关于创建DAO层的问题中提到的,因此我的问题更倾向于在DAO层中有接口,或者我可以通过在DAO上安装@Component来使用DAO。同样,如果您已经使用了Hibernate或JPA等已经抽象了DAO层的框架,您将不需要DAO的任何接口,除非您想要/需要为软件架构团队创建这样的技术需求。如果你没有这样的框架,那么创建你的DAO接口并用注释实现。我同意你的观点@the Thom,但是接口是我们定义的,当我们有很多频繁的更改时,正如你在回答中提到的,但在我的应用程序中,我没有这样的用例。