我正在学习存储库模式。我在一个示例项目中实现了它。但我不知道存储库的主要好处是什么。
private IStudentRespostiry repository = null;
public StudentController()
{
this.repository = new StudentRepository();
}
public StudentController(IStudentRespostiry repository)
{
this.repository = repository;
}
StudentRepository类也可以通过创建类的对象来访问该方法。
StudentRepository obj = new StudentRepository();
任何人都有充分的理由。我知道隐藏数据。
答案 0 :(得分:1)
第二个陈述允许dependency injection。这意味着您可以使用IoC容器来注入正确的实现。
例如,在单元测试中,您可以注入内存数据库(请参阅mocking),而生产代码将使用实际访问实际数据库的实现。
答案 1 :(得分:1)
存储库人员引用的主要原因是可测试性和模块性。为了测试性,您可以使用存储库使用的模拟替换具体对象。对于模块化,您可以创建不同的存储库,例如使用不同的数据故事。
但我对模块化持怀疑态度,因为存储库通常是高度漏洞的抽象,而且更改后备数据存储极为罕见。意味着应该像创建不同实例一样简单的事情变成完全重写。击败了存储库的目的。
有other ways来实现数据存储的可测试性,而不必担心漏洞抽象。
至于你的代码示例。在第一种情况下,第一个构造函数是“默认”的,第二个可能是IoC或使用模拟测试。 IMO应该没有“默认”,因为它消除了实际拥有IoC的目的。