将存储库直接在视图模型中实例化

时间:2011-12-29 07:22:34

标签: asp.net-mvc

上周,我下载了在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);
    }

如您所见,存储库直接在视图模型中实例化(在构造函数中)。这是正确的方式吗?

通常,我使用了业务层,最终使用了这样的服务层: 控制器>>商业>>存储库

感谢您的建议。

1 个答案:

答案 0 :(得分:2)

  

这是正确的方法吗?

在我看来,这似乎不是正确的方式。通常,您可以在模型中执行此存储库访问,而不是在视图模型中。他们似乎在视图模型中有一个名为Post的属性。所以他们在视图模型中引用了域模型,我不会这样做。

就构造函数中的存储库的特定实现进行硬编码而言,如果您不关心层之间的弱耦合,可重用性,维护,单元测试......,您可以这样做。没有人可以说服我们IoC应该永远完成。它有其优点和缺点。