我正在创建一个新的Web应用程序,它将使用一堆数据访问对象(DAO)类对数据执行CRUD操作。我知道当我有使用我的DAO类的外部用户/应用程序时,我应该编写java接口。但是如果没有这样的需求你认为我还应该编写接口吗?我将使用spring将DAO类注入Spring Controller(我正在使用Spring MVC)类。
答案 0 :(得分:9)
是的,你应该。您使用它们的类应仅依赖于接口。这使您可以使用DAO的虚假实现轻松初始化客户端类,以便测试这些类等。如果您只使用一个具体的类,那么您的DAO的客户端将直接依赖于该单个(数据库访问)实现,并且非常难以测试。
制作类的难易程度仅依赖于它们所依赖的服务的接口是依赖注入的主要优势之一,而你自己和你的应用程序通过不利用它来帮助你。
答案 1 :(得分:9)
注意:您应该始终尝试将Interface与Implementation分离。这将使您可以使用此DAO图层对其他图层进行更多控制。
但是,正如您所知,接口为您提供了更多的抽象,并制作了代码 更灵活,更有弹性,因为你可以使用不同的 在不改变其客户端的情况下实现相同的接口。 不过,如果你不认为你的代码会改变,或者(如果你的话) 认为你的抽象是足够好的,你不一定要使用接口
换句话说:接口很好,但是在创建接口之前 每个班级都会考虑它
答案 2 :(得分:3)
您应该为DAO(存储库?)编写接口的最大原因是,您可以轻松地构建模拟(或使用模拟框架)来对与DAO相关的任何内容进行单元测试。
即使你没有进行单元测试,遵循DIP
仍然是一个很好的设计实践此外,在任何现代IDE中“右键单击=>提取界面”需要多长时间?
答案 3 :(得分:2)
我不同意Color Blend。基本上我的意见是:春天注入的任何东西都应该由界面支持(和引用)。
答案 4 :(得分:2)
为外部客户端设计API时的常用方法是创建接口,而不是类。
这样客户端只会知道应该在接口javadocs中明确声明的API合约,并且不依赖于您选择的实现细节。
另外,通过提供API的模拟实现,您将能够在JUnit中测试API的客户端,如果不使用接口,这将更难。
答案 5 :(得分:0)
我认为你不应该这样做。你只会耗费你的时间。只有在必要时才创建它们。