相信我,在SO上我已经看过很多关于这个问题的文章和问题,但是没有找到令人满意的答案。以Matt Robert的教程中的存储库模式和单元测试为例:
我不明白...两个存储库是否包含完全相同的查询逻辑?看起来是这样的,如果是这样的话,那么这是一个有用的模式吗?这意味着每当我在虚拟存储库中更改查询时,我都必须更改实际存储库中的查询逻辑-那听起来很麻烦,也容易出问题。
我希望将查询保留在一个方法中并测试该方法。后来我想到可以像这样做:
我不明白...两个存储库是否包含完全相同的查询逻辑?看起来是这样的,如果是这样的话,那么这是一个有用的模式吗?这意味着每当我在虚拟存储库中更改查询时,我都必须更改实际存储库中的查询逻辑-那听起来很麻烦,也容易出问题。
我希望将查询保留在一个方法中并测试该方法。后来我想到可以像这样做:
//Student can be from the db or a fake list
public person GetStudent(IEnumerable<Student> students,int studentid)
{
return students.FirstOrDefault(s =>s.PersonId ==studentid);
}
//unit test
Assert.IsNull(GetStudent(fakeStudentList, -1))
//actual code
var student = GetStudent(entities.students,-1)
是否有一种模式可以模仿上述模式?如果有,那么它是什么?或者实际上就是存储库模式的工作方式?如果是这样,为什么感觉存储库模式会重复代码?
还有,努力方面...看看这个可怕的例子: example :S?