【问题标题】:Should ViewModels be used in every single View using MVC?是否应该在使用 MVC 的每个视图中使用 ViewModel?
【发布时间】:2011-09-11 04:17:48
【问题描述】:

我了解您使用 ViewModel 来存储来自其他模型和要在视图中使用的源的不同数据,因为模型并不总是包含您想要的内容。

我正在尝试确定为每个视图使用 ViewModel 是否合适。我问的原因是出于一致性原因。你可以有一个只需要模型本身的视图和另一个必须有一个 ViewModel 的视图。将这些混合在您的所有视图之间是否很好?还是每个 View 都应该有一个 ViewModel?

了解这一点很重要,因为我的模型与数据库直接相关,因为我使用的是 Entity Framework 4.1 Code First。

【问题讨论】:

    标签: c# asp.net-mvc model-view-controller asp.net-mvc-3 viewmodel


    【解决方案1】:

    这不是要求,但它是最佳实践。

    您希望尽可能地将数据库与演示文稿分离,并且拥有ViewModel(即使它相同)可以为您提供这种分离。它还使事情保持一致,因此您不会有一些带有模型的视图,而有些则没有。这种类型的设计让您考虑您希望视图听到的所有数据并找出优化,查看是否可能发生数据重复,将数据集中到一个位置等。

    将您的ViewModel 视为与View 的合同......这个View 需要X 才能工作。

    前期多做一些工作,但最终会得到回报。

    【讨论】:

    • +1 最佳实践 + 与数据库解耦是很好的选择。
    • 好的,我只是想确定一下,因为我对如何设计这些东西不熟悉。我还发现 ViewModel 可以帮助“不”违反得墨忒耳法则。
    【解决方案2】:

    就我个人而言,我喜欢将发送到我的视图的内容从我的模型中抽象出来。

    原因是需求发生了变化,而使用视图模型,我可以快速包含我需要的数据片段,而不会污染我的模型。

    当您的模型由框架创建时,这一点会发挥更大的作用。如果您的框架相关模型发生变化,那么抽象出模型的细节可能会在未来真正实现。

    还值得记住的是,您的视图独立于您的控制器和模型。您可能会发现,通过使用视图模型,您可以更轻松地跨控制器方法重用视图,而不是将视图绑定到模型本身。

    【讨论】:

    • +1 您还提出了一个很好的观点,即不必污染您的数据库模型。
    猜你喜欢
    • 2014-07-12
    • 1970-01-01
    • 1970-01-01
    • 2011-01-25
    • 2017-11-06
    • 1970-01-01
    • 2011-04-09
    • 1970-01-01
    • 2015-01-15
    相关资源
    最近更新 更多