Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在服务层上使用接口_Java_Model View Controller - Fatal编程技术网

Java 在服务层上使用接口

Java 在服务层上使用接口,java,model-view-controller,Java,Model View Controller,在我们的项目架构中,我们使用一个经典的MVC模式,包括一个经典的服务层(打开事务并调用DAO层) 对于每个服务,我们都有一个实现和his接口。但老实说,我很确定对于一个服务和他的接口,我们永远不会有多个实现。因此,好的,也许在接口中声明public方法有助于了解服务的功能更为明确,但是一个接口用于具有多个实现,如果我们知道不会有多个实现,我们是否应该保留它们?来自: 实现一个接口可以使类变得更加正式 它承诺提供的行为。接口构成合同 在阶级和外部世界之间,本合同生效 在编译时由编译器执行 如果您知

在我们的项目架构中,我们使用一个经典的MVC模式,包括一个经典的服务层(打开事务并调用DAO层)

对于每个服务,我们都有一个实现和his接口。但老实说,我很确定对于一个服务和他的接口,我们永远不会有多个实现。因此,好的,也许在接口中声明public方法有助于了解服务的功能更为明确,但是一个接口用于具有多个实现,如果我们知道不会有多个实现,我们是否应该保留它们?

来自:

实现一个接口可以使类变得更加正式 它承诺提供的行为。接口构成合同 在阶级和外部世界之间,本合同生效 在编译时由编译器执行

如果您知道只有一个实现,那么实现本身将定义契约,因此您可以删除接口


但是编写接口可以帮助您更好地定义契约,而且,您可能需要在给定的时间点为服务编写一个mock,在这种情况下,您将受益于接口的使用。

我认为这是保留接口的一个好方法

原因:
1.假设您希望使用不同的实现为同一个应用程序编写junits,例如,从数据库获取数据,但您希望从单独的数据源获取数据,那么使用不同的实现就足够了。

我同意这对单元测试有帮助,但单元测试不应该驱动开发,不是吗?我没有提到这一点,但我们正在使用Spring,不使用组件接口有时会带来问题(因为Spring使用代理系统?)。我说的是模拟服务(返回实体的模拟列表只是为了查看视图是否正确显示集合)。在您的情况下,为了避免弄乱Spring代理,我肯定会使用接口。看看这个:问题是关于服务层中的接口,而不是关于DAO(数据访问)层。