DAOImpl 接口

use*_*660 4 java spring dao

在Spring中,在创建DAO类来访问数据库的同时,我还实现了DAO接口。IE :

public interface EmployeeDAO {
    public void addEmployee(Employee emp);
}

@Repository
public class EmployeeDAOImpl implements EmployeeDAO {
    public void addEmployee(Employee emp) {
        /* code here */
    }
}
Run Code Online (Sandbox Code Playgroud)

我们为什么要实现一个接口?为什么“公共类 EmployeeDAOImpl”还不够?谢谢。

Wei*_* Li 5

“针对接口编程,而不是实现。” 是一个基本的 OO 设计原则。遵循这一原则可以使您的代码更具可扩展性。让我们举一些例子:

  1. 如果您正在为调用 EmployeeDAO 的上层服务编写一些测试用例,您可以简单地编写一个实现 EmployeeDAO 接口的 MockEmployeeDAO 类,然后您就可以模拟许多测试场景,而无需实际查询数据库。
  2. 如果可能需要更改数据层的实现,例如从关系型 DB 迁移到 NoSql DB,或者添加缓存层。通过对 DAO 接口进行编程,无需修改上层代码即可进行更改。

如果您目前看不到任何好处,请遵循该原则。我确信您将来会受益匪浅。