3

如果我想结合使用每个实体的存储库和每个视图的 Viewmodels,它是如何工作的?

我可以查找任何网站提示吗?也许有人可以举一个简单的例子吗?

谢谢

最好的祝福!

4

3 回答 3

3

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

领域项目(业务逻辑):

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

Web UI 项目(MVC Web 应用程序):

  • 模型(查看模型)
  • 意见
  • 控制器
  • 等等,你明白了

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

在这种情况下,您的控制器类引用域层并使用 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);
        }
    }
}
于 2012-02-19T18:39:25.023 回答
2

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

于 2012-02-19T18:47:24.230 回答
0

我不是专业的开发人员,但我认为 Steve Sanderson 的模型不适合某些项目,因为您的视图直接针对该模型。如果您只想显示几个属性而不是全部属性会怎样?您的完整模型正在前往视图。

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

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

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

对于这种情况的想法可能会受到欢迎。谢谢

于 2012-03-13T15:42:37.470 回答