在结合实体框架实现存储库模式时,为什么我看到许多示例使用其存储库类的接口?这里是一个参考的具体例子。
界面的意义何在?为什么不只是课堂?是否真的需要不止一个类订阅那个非常具体的接口,例如,仅针对雇员?
在结合实体框架实现存储库模式时,为什么我看到许多示例使用其存储库类的接口?这里是一个参考的具体例子。
界面的意义何在?为什么不只是课堂?是否真的需要不止一个类订阅那个非常具体的接口,例如,仅针对雇员?
这是一种经常使用的模式,通常专门用于单元测试,而不是真正特定于实体框架、存储库模式,甚至任何数据访问类型。另一个很大的好处是,它使后者有机会在不更改使用它的代码的情况下提供替代实现。例如,考虑使用依赖注入模式的这段代码:
public class EmployeeService
{
private readonly IEmployeeRepository employeeRepository;
public EmployeeService(IEmployeeRepository employeeRepository)
{
this.employeeRepository=employeeRepository;
}
public IEnumerable<Employee> GetAllEmployees()
{
IEnumerable<Employee> employeeList=this.employeeRepository.GetAll();
//Optionally do some processing here
return employeeList;
}
}
通过在存储库中拥有接口,请注意您现在可以完全使用该接口工作,而无需提及实际的存储库,这就是它的真正价值。它主要有两个好处:
IEmployeeRepository
,它不会进入真正的数据库,而是返回一个硬编码的列表,这样你就可以测试你的方法而不必担心数据库暂时。这被称为“模拟”,通常是将接口放在那里的主要原因。还有几个库可以自动执行该过程,所有这些库都依赖于它们生成一个实现接口的假类这一事实。到目前为止,这是放置这样一个界面的最常见原因。