存储库的好处以及两个语句之间的区别

时间:2015-03-12 05:17:57

标签: c#-4.0

我正在学习存储库模式。我在一个示例项目中实现了它。但我不知道存储库的主要好处是什么。

private IStudentRespostiry repository = null;

public StudentController()
{
    this.repository = new StudentRepository();
}

public StudentController(IStudentRespostiry repository)
{
    this.repository = repository;
}

StudentRepository类也可以通过创建类的对象来访问该方法。

StudentRepository obj = new StudentRepository();

任何人都有充分的理由。我知道隐藏数据。

2 个答案:

答案 0 :(得分:1)

第二个陈述允许dependency injection。这意味着您可以使用IoC容器来注入正确的实现。

例如,在单元测试中,您可以注入内存数据库(请参阅mocking),而生产代码将使用实际访问实际数据库的实现。

答案 1 :(得分:1)

存储库人员引用的主要原因是可测试性和模块性。为了测试性,您可以使用存储库使用的模拟替换具体对象。对于模块化,您可以创建不同的存储库,例如使用不同的数据故事。

但我对模块化持怀疑态度,因为存储库通常是高度漏洞的抽象,而且更改后备数据存储极为罕见。意味着应该像创建不同实例一样简单的事情变成完全重写。击败了存储库的目的。

other ways来实现数据存储的可测试性,而不必担心漏洞抽象。

至于你的代码示例。在第一种情况下,第一个构造函数是“默认”的,第二个可能是IoC或使用模拟测试。 IMO应该没有“默认”,因为它消除了实际拥有IoC的目的。