在实现存储库模式时,结合实体框架,为什么我会看到许多使用接口为其存储库类的示例?参考的具体示例是here。
界面有什么意义?为什么不只是上课?例如,对于员工而言,是否真的需要多个订阅该特定界面的类?
答案 0 :(得分:5)
这是一种经常使用的模式,通常专门用于单元测试,并非真正特定于实体框架,存储库模式,甚至任何数据访问类型。另一个很大的好处是,它为后者提供了提供替代实现的机会,而无需使用它来更改代码。 例如,考虑使用dependency injection模式的代码:
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
实现,它不会转到真正的数据库,而是返回一个硬编码列表,这样你就可以了可以测试你的方法,而不用担心现在的数据库。这称为“模拟”,通常是将接口放在那里的主要原因。还有一些库可以自动化该过程,所有这些库都依赖于它们生成实现接口的假类的事实。到目前为止,这是建立这样的界面的最常见原因。