MVC:Repository和Viewmodels是否一起模式以获得更好的结构?

时间:2012-02-19 18:24:37

标签: asp.net-mvc-3 model-view-controller mvvm viewmodel view-model-pattern

如果我想使用每个实体的repositorys和每个视图的Viewmodels进行组合,它是如何工作的?

我可以查看任何网站提示吗? Maby有人可以给出一个简单的例子吗?

由于

最诚挚的问候!

3 个答案:

答案 0 :(得分:3)

我喜欢以下结构(来自着名的Steven Sanderson's Pro ASP.NET MVC series):

域项目(业务逻辑):

  • 抽象文件夹(存储库接口)
  • 具体文件夹(存储库实施)
  • 实体(EF生成的课程)

Web UI项目(MVC Web App):

  • 模型(查看模型)
  • 浏览
  • Controlers
  • 等,你明白了

主要的是你将业务逻辑(应该存放你的存储库)与Web UI(MVC项目)分开

在这种情况下,您的Controller类引用域层并使用DI / IoC来调用存储库的正确实例。

示例控制器类:

namespace MyMvcProject
{
    using System.Whatever;
    using MyDomainLayer;

    public class MyController : Controller
    {
        private readonly IMyRepository _myRepository;

        public MyController(IMyRepository myRepository)
        {
            // Resolved using your favorite DI/IoC Container:
            this._myRepository = myRepository;
        }

        public ActionResult DoSomething()
        {
            var stuff = _myRepository.GetStuff();
            return View(stuff);
        }
    }
}

答案 1 :(得分:2)

使用AutoMapper将数据从实体复制到模型,反之亦然。 这将减少你必须编写的许多“管道”代码。

答案 2 :(得分:0)

我不是一名专业的开发人员,但我认为史蒂夫桑德森的模型不适合某些项目,因为你正在直接对模型进行观察。如果您只想展示一些属性而不是所有属性会发生什么?您的完整型号正在前往视野。

我认为你的观点必须适用于viewmodel类,而不是直接来自orm(通过存储库等)的模型

我发现的唯一问题是模型到viewmodel和viewmodel到模型之间的映射过程。让我解释一下......

我试图用automap进行映射,模型之间的方向 - > viewmodel运行正常,但是在另一个方向(viewmodel to model)我没有找到自动执行的方法,因为viewmodel通常不拥有模型所具有的所有属性,并且如果你做了很多自动化来对对象建模很多属性是空的。 最后,您需要始终制作一些手动映射。

欢迎这种情况的想法。 感谢