我是Spring Mvc的新手,在很多教程中,我发现有一个像这样的Dao接口
public interface StudentDAO {
public List<Student> getStudents();
public void addEntry(Student student);
public void updateEntry(Student student);
public void deleteEntry(Student student);
public Student getStudentById(int id);
}
还有这样的服务
public interface StudentService {
public List<Student> getStudents();
public void addEntry(Student student);
public void updateEntry(Student student);
public void deleteEntry(Student student);
public Student getStudentById(int id);
}
这些接口都有实现。
我的问题是为什么我们需要接口而不是直接实现类?
我很高兴看到有人质疑这种做法。
Spring Framework 很早以前就引入了为其托管服务/DAO bean 定义接口的模式。我认为这种做法的引入是由于他们用于创建动态代理的技术的限制。
当定义 Spring 管理的 bean 时,框架会创建底层实例的代理,目的是使用 AOP 技术用横切功能来装饰它。显然,他们在 Spring Famework 的早期版本中用来实现这些代理的工具需要一个接口来创建代理。
这一要求在最新版本的 Spring Framework 中不再适用,您可以安全地处理这些无用的接口。
如今,易于测试的原因也不再成立,因为像 Mockito 这样的模拟框架也能够模拟具体类。
此外,您可以使用 @Primary 注释在测试上下文中将实际实现替换为自定义模拟。
出于这些原因,我将废弃内部服务和 DAO 类的接口,这些接口永远不会有多个共存的有效实现。
保留真正需要的设计模式的接口。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)