MVC:Repository和Viewmodels都将模式组合在一起以获得更好的结构



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

我能查到什么网站提示吗?也许有人能举个简单的例子?

感谢

谨致问候!

我喜欢以下结构(来自著名的Steven Sanderson的Pro ASP.NET MVC系列):

域项目(业务逻辑):

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

Web UI项目(MVC Web App):

  • 模型(视图模型)
  • 视图
  • 控制器
  • 等等,你明白了

最重要的是,您将业务逻辑(应该包含存储库)与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);
        }
    }
}

使用AutoMapper将数据从实体复制到模型,反之亦然。这将减少许多"管道"代码,否则您将不得不编写这些代码。

我不是一个专业的开发人员,但我认为Steve Sanderson的模型对于某些项目来说不是合适的模型,因为你直接在视图中使用该模型。如果只想显示少数属性而不是全部属性,会发生什么情况?您的完整模型正在向视图移动。

我认为您的视图必须针对viewmodel类,而不是直接来自orm(通过存储库等)的模型

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

我试图用automap进行映射,模型->视图模型之间的方向很好,但在另一个方向(视图模型到模型),我找不到自动进行映射的方法,因为视图模型通常不拥有模型所拥有的所有属性,如果你对模型对象进行自动映射,很多属性都是空的。最后,您需要始终进行一些手动映射。

对这种情况的想法可能是受欢迎的。感谢

最新更新