DAOImpl接口

DAOImpl interfaces

在 Spring 中,在创建 DAO class 以访问数据库时,我还实现了一个 DAO 接口。即:

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

@Repository
public class EmployeeDAOImpl implements EmployeeDAO {
    public void addEmployee(Employee emp) {
        /* code here */
    }
}

我们为什么要实现接口?为什么 "public class EmployeeDAOImpl" 不够?谢谢。

这个问题和这个差不多link

Using interfaces for writing DAO classes

我希望这会消除你的疑虑

"Program to an interface, not an implementation."是一个基本的OO设计原则。遵循这一原则使您的代码更具可扩展性。让我们举一些例子:

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

如果您目前看不到任何好处,请遵循原则。我相信你将来会得到好处。