【问题标题】:What is the pivot in MVVM pattern?MVVM 模式的支点是什么?
【发布时间】:2011-02-26 14:22:01
【问题描述】:

谈到 MVC 模式,我一直认为控制器是支点。也就是说,它接收用户希望执行的所有操作,然后决定使用哪个模型和视图来完成用户请求的操作。 (我的 MVC 经验是通过 Asp.net 获得的,因此我正在考虑如何使用路由来选择正确的控制器,然后加载模型并选择并创建适当的视图)。

在 MVVM 模式中有一个支点吗?视图是否是用户与枢轴交互的枢轴,这会导致不同的模型被加载并使用适当的虚拟机呈现给用户?

另外,通常位于 MVC 中的控制器中的逻辑在 MVVM 模式中位于何处?

【问题讨论】:

    标签: asp.net-mvc silverlight model-view-controller mvvm


    【解决方案1】:

    MVVM 比 MVC 更分散。视图和视图模型通常在设计时绑定,这意味着 VM 不会执行与 MVC 控制器相同的功能。它更像是一个纯粹的协调器而不是控制器——一个好的视图模型通常具有相对较少的决策逻辑。

    MVVM 背后的整个想法是将视图的图形元素与其编程元素隔离开来。它与 MVC 的相似之处实际上只是表面的。在 MVC 中,控制器充当执行者,是应用程序背后的真正智能。在 MVVM 中,VM 仅充当视图的编程抽象,而智能分布在整个应用程序中。

    MVVM 组件以协作的分布式方式运行,这往往会消除一些 MVC 应用程序中普遍存在的单一集中。这需要一点时间来适应,但效果很好。将 MVVM 应用程序视为机械瑞士手表——手表的枢轴点是什么?真的没有。手表是协同工作以执行任务的自治组件的集合。真的没有比策划行动的“关键点”了。

    【讨论】:

    • 大卫我喜欢你的回答。但是当用户单击某个视图上的按钮时,决定下一步必须做什么的逻辑在哪里(加载另一个视图,将数据保存在当前视图中,或者两者兼而有之)。这个逻辑是视图还是视图模型的一部分?
    • 视图模型通常充当协调器。它将决定谁满足按钮单击发出的请求。但它本身通常不会执行该操作——它通常被委托给 Command 或 Service 对象。这使视图模型保持整洁,并专注于其引导流量的责任。
    【解决方案2】:

    我认为 MVVM 中没有等效的支点。但是我想视图可以选择它的虚拟机。出于测试目的,您可以使用没有视图的 VM。控制逻辑在 ViewModel 中。

    我喜欢将 MVVM 视为 M VM V

    Fowler 对 VM 进行了很好的描述,他称之为 Presentation Model

    【讨论】:

      【解决方案3】:

      我认为在 MVVM 中应该是视图。视图响应用户操作,然后决定如何响应。它将根据用户的操作调用 VM 上的一种方法或另一种方法。 VM 然后执行该操作。

      我认为您也可以进一步将 MVVM 分为两种风格;一个模型丰富,一个模型贫血。 This link 关于 Csla 框架有一些关于“丰富”模型提供什么与贫血的讨论。

      【讨论】:

        【解决方案4】:

        在 MVVM 中,您的视图只显示您的数据。就像视图在 MVC 中所做的一样。这样一来,您的模型就可以完成所有工作。

        如果您在asp.net 页面上放置一个按钮,然后按下它,这就像在silverlight 页面上放置一个按钮一样。使用 MVVM 时,该视图的模型将处理它需要对自己执行的所有操作以操作数据。视图将相应地响应(通过绑定)。在 MVC 中,控制器将决定对模型执行什么操作。

        所以MVC“View Model”中的M&C,在MV“View Model”中合并为一个M。

        【讨论】:

          猜你喜欢
          • 2011-02-01
          • 1970-01-01
          • 2011-04-15
          • 2010-12-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-20
          相关资源
          最近更新 更多