上周,我下载了在ASP.NET MVC3中开发的博客引擎的源代码。在分析代码时,我注意到他们使用不同的方法来检索数据以填充视图模型。
以下是'帖子'的示例。查看模型:
控制器:
public ActionResult Details(string slug)
{
var model = new PostDetailsViewModel(UnitOfWork, slug);
return View(model);
}
视图模型:
public PostDetailsViewModel(IUnitOfWork unitOfWork, string slug)
{
_repository = new PostRepository(unitOfWork);
Post = _repository.FindBySlug(slug);
}
存储库:
public Post FindBySlug(string slug)
{
return FindAll().SingleOrDefault(x => x.Slug == slug);
}
如您所见,存储库直接在视图模型中实例化(在构造函数中)。这是正确的方式吗?
通常,我使用了业务层,最终使用了这样的服务层: 控制器>>商业>>存储库
感谢您的建议。
答案 0 :(得分:2)
这是正确的方法吗?
在我看来,这似乎不是正确的方式。通常,您可以在模型中执行此存储库访问,而不是在视图模型中。他们似乎在视图模型中有一个名为Post的属性。所以他们在视图模型中引用了域模型,我不会这样做。
就构造函数中的存储库的特定实现进行硬编码而言,如果您不关心层之间的弱耦合,可重用性,维护,单元测试......,您可以这样做。没有人可以说服我们IoC应该永远完成。它有其优点和缺点。