【问题标题】:Having the repository directly instantiated in the view model在视图模型中直接实例化存储库
【发布时间】:2012-01-29 16:55:22
【问题描述】:

上周,我下载了一个用 ASP.NET MVC3 开发的博客引擎的源代码。在分析代码时,我注意到他们使用不同的方式来检索填充视图模型的数据。

以下是“post”视图模型的示例:

控制器:

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);
    }

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

通常,我使用业务层,最终使用如下服务层: 控制器>>业务>>存储库

感谢您的建议。

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    这是正确的方法吗?

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

    就在构造函数中对存储库的特定实现进行硬编码而言,好吧,如果您不关心层之间的弱耦合、可重用性、维护、单元测试……您可以做到.没有人能说服我们应该始终执行 IoC。它有它的优点和缺点。

    【讨论】:

    • 谢谢达林,这是我一直在寻找的回复 :) 我读过一篇关于填充视图模型的帖子(你在 2 个月前回复过),这对我来说似乎是一个更好的方法,所以我会那样做的。在这里:stackoverflow.com/questions/7943039/…
    猜你喜欢
    • 1970-01-01
    • 2015-06-11
    • 1970-01-01
    • 1970-01-01
    • 2016-02-27
    • 1970-01-01
    • 2014-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多