2011-12-29 69 views
1

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

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

通常情况下,我用这样的业务层,最后一个服务层: 控制器>>业务>>库

谢谢你的建议。

回答

2

这是正确的方法吗?

在我看来,这不是一个正确的方式。通常情况下,您可以在模型中执行此存储库访问,而不是在视图模型中。他们在视图模型中似乎也有一个名为Post的属性。所以他们在视图模型中引用领域模型,我不会这样做。至于在构造函数中硬编码库的具体实现方面,如果你不关心层之间的弱耦合,可重用性,维护,单元测试等等,你可以做它。没有人能说服我们应该始终做好IoC。它有其优点和缺点。

+0

感谢Darin,这是我寻找的回应:)我阅读了一篇关于填充视图模型的帖子(2个月前回复的地方),这对我来说似乎是一个更好的方法,所以我会这样做。这里是:http://stackoverflow.com/questions/7943039/how-are-you-populating-validating-your-viewmodels – Bronzato 2011-12-29 07:45:50

相关问题