【问题标题】:ASP.NET MVC best practices using EntityFramework and mapped ViewModels使用 EntityFramework 和映射的 ViewModel 的 ASP.NET MVC 最佳实践
【发布时间】:2011-07-12 16:29:15
【问题描述】:

我之前从未使用过 MVC 设计模式,最近我开始使用 ASP.NET MVC 进行项目。

我使用 ActiveRecord 作为我的数据层。

我还使用视图模型(每个视图唯一)和 AutoMapper 将我的视图模型映射到 EntityFramework 实体。

在研究 MVC、EntityFramework 和阅读不同文章的几天后,我想出了以下设计:

在我的解决方案中,我有一个包含视图和控制器的 Web 项目(表示层)。

我有核心项目,我在其中定义了我的 ViewModel 和服务(所有业务逻辑所在的业务层)

我有 EntityModels 项目,所有我的 EF 实体都在其中(数据层)

这种设计允许我将数据层与表示层分开,Web 项目对 EntityModels 项目一无所知,反之亦然,所有逻辑都存在于业务层中。

从我的控制器(在验证检查后)我将 viewModel 传递给服务层,在该层执行映射和所有必要的业务逻辑。

这个设计完全正确吗?

我担心的是,我已经读过 ViewModel 应该在表示层中定义。我看到了表示层引用数据层并且映射是在控制器中完成的示例(好的做法?)。在这种情况下,控制器将域模型传递给业务层。我在这里没有任何经验,但我不喜欢它。

那么,谁能指出我哪里对哪里错?

提前致谢。

【问题讨论】:

    标签: asp.net-mvc entity-framework design-patterns asp.net-mvc-viewmodel


    【解决方案1】:

    整体架构看起来不错。在我看来,决定在哪里查看模型取决于一个因素。

    您是否计划将来让其他客户端受益于重用这些视图模型(iPad、Android 等)?

    如果是这样,请务必将它们排除在 MVC 程序集中,并将它们放在自己的程序集中。否则,如果您决定创建第二个客户端,只要您可以移动它们并更改代码,您就可以安全地将它们放入 MVC 应用程序中。

    为了记录,我总是把我的视图模型放在他们自己的程序集中。前期不需要更多时间,但如果事情发生变化,它会带来回报。

    【讨论】:

    • 是的,我所有的视图模型都在它们自己的命名空间下的单独程序集中
    • @jfar 构建时间,认真的吗?你在什么样的恐龙机器上编码?没有冒犯,但我完全不同意你的整个评论。添加额外的程序集不再复杂,并且构建时间如此之短,特别是对于将包含简单视图模型的程序集,您似乎真的在试图找到不同意这个答案的理由。如果您在构建过程中没有几秒钟的空闲时间,那么您做的事情就大错特错了。
    • @Craig M,当您每天构建数百次时,每增加一秒都很重要。 Projectitus,在没有有效物理原因的情况下为每件小事创建项目(创建新项目而不是文件夹的唯一原因),是非常糟糕的做法。为将来节省 15 分钟的难得机会而减慢构建时间。不值得。
    • 假设“一天构建数百次”等于至少 200 次,这意味着您在一天 8 小时内每 2.4 分钟构建一次,或者您非常夸张。我同意一些开发人员有 Projectius,我不喜欢这种做法,但作为系统核心的东西,如模型,肯定需要自己组装。
    【解决方案2】:

    FWIW,我也在做同样的事情——但我是 MVC 的新手,所以不能 100% 确定我也走在正确的道路上。但是,它只是“感觉正确”,这往往告诉我它是正确的。 我唯一要补充的是,我使用了 automapper (automapper.org),它几乎消除了拥有图层的开销。一定要看看IMO。 我不得不说,唯一感觉不是 100% 正确的是,使用这种模式,我们正在创建大量的 ViewModel -> 每个 View 一个。我假设您的意思是每个域实体的创建、索引、更新、详细信息每个都有自己的 ViewModel?还是您在视图之间共享一个 ViewModel? 最后,我不购买 jfars 的论点,即它会产生大量的复杂性/构建时间。至少,它在概念上将层分离得更多。它让我觉得分离关注点的工作要好得多,而且开销很小。
    我有一个将视图模型重用于silverlight实现的白日梦,但还没有真正想到这一点。但是如果你很好地将所有“非 UI”代码分解到视图模型和服务中,那么做一个新的 UI 应该是“微不足道的”,对吗?我们会看到:-)

    【讨论】:

    • 哎呀,重新阅读您的问题,您已经在使用 automapper - 抱歉
    猜你喜欢
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 2011-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    相关资源
    最近更新 更多