【问题标题】:ASP.Net MVC and MVVMASP.Net MVC 和 MVVM
【发布时间】:2011-04-13 22:54:31
【问题描述】:

MVVM 是一种 Microsoft 设计模式,早于 ASP.Net MVC。任何人都可以了解 MVVM 和新的 MVC 模式之间的差异吗?

【问题讨论】:

  • MVC(可在最新的 ASP.NET MVC 实现之外使用)早于 MVVM 很长很长的时间......请参阅:en.wikipedia.org/wiki/Model-view-controller
  • 已编辑以明确指出它是 Microsoft ASP.Net MVC。我知道 MVC 早于 MVVM,但 ASP.Net MVC 是 MVVM 的继承者,尽管 MVVM 是基于 MVC 本身的。

标签: model-view-controller mvvm


【解决方案1】:

我冒昧地建议 MVVM 是 Microsoft 的设计模式,而 ASP.NET MVC 是最近才出现的,是 Microsoft 的特定实现(不一定遵循 MVC 或 MVVM,但类似)。正如 Reed 所建议的那样,MVC 早在 70 年代就已经存在。

【讨论】:

    【解决方案2】:

    MVC 和 MVVM 都是架构模式。 MVC 的根源可以追溯到 Smalltalk。 ASP.NET MVC 是微软使用 ASP.NET 框架实现的 MVC 模式。

    两种模式都处理关注点分离。 MVC 更多的是处理应用程序中各种常用层的交互,如模型(数据层)、视图(表示层)和控制器(业务逻辑层)。

    凭借 WPF 和 Silverlight 的高级数据绑定功能,MVVM 更适合并被宣传为下一件大事。 Martin Fowler 在他的《企业应用程序架构》一书中将这些模式概括为表示模式。

    我看到使用 ViewModel 的一个优点是它允许您使用单元测试更好地测试应用程序代码。由于这个原因,我发现 MVVM 或至少它的 ViewModel 位在 ASP.NET MVC 应用程序中也经常使用。

    【讨论】:

    • 是的 ViewModel 也存在于 ASP.Net MVC 中。我们不能将 Silverlight 的相同高级功能与 MVC 中的表示层集成吗?我只是想知道在 Web 应用程序开发中一个比另一个更重要。
    【解决方案3】:

    谁能阐明 MVVM 和新的 MVC 模式之间的差异?

    是的:当使用 ASP.NET MVC 时,MVC 模式使用控制器将模型直接呈现到视图中。这对于具有少量对象的琐碎项目是完全可以接受的。这可能成为问题的地方在于,UI 层的关注点可能会渗透到底层(域)模型。

    当使用 MVVM 时,您将在模型和视图之间添加一个抽象,这当然是视图模型。这允许作者将最容易被视图使用的对象投影到视图中。 ViewModel 可以包含在(域)模型中不合适的东西。这里相关的成本是您需要具有将数据从模型转换到视图模型的映射逻辑。 AutoMapper 等工具可以帮助完成这项工作。

    一个简单的例子可能是模型不需要某些字段,但特定的视图需要。如果将该逻辑附加到 ViewModel 上,而不是将这个逻辑烘焙到用户界面中,那么其他 UI 可以使用相同的 VM,而不必复制烘焙到第一个用户界面中的逻辑。

    【讨论】:

      【解决方案4】:

      MVC 和 MVVM 实际上是完全不同的。当谈到 ASP MVC 时,似乎对 MVVM 有一些误解。在 MVC 中制作“视图模型”的做法是提供视图的特定类,而好的做法并不符合 MVVM 的精神,实际上只是 MVC 的更清洁版本。

      MVVM 更适合使用 WPF 或类似的桌面,或者纯粹在使用 JavaScript 框架(如 knockout.js)的浏览器中。该模式与 MVC 完全不同,并且涉及“订阅”模型的视图。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-28
        • 1970-01-01
        • 1970-01-01
        • 2011-06-20
        • 2016-03-12
        • 1970-01-01
        相关资源
        最近更新 更多