【发布时间】:2016-04-03 03:22:24
【问题描述】:
我正在尝试学习 Presentation Model 模式,但在尝试中,我对 Presentation Model 和 MVP - Passive View 的区别感到困惑。特别是当 Presentation Model 进行同步而不是 View 时。这个问题是对previous question 的扩展。
Martin Fowler 在他的Article 中提供了演示模型进行同步的可能性。
引用视图的表示模型通常在表示模型中维护同步代码。由此产生的观点非常愚蠢。该视图包含任何动态状态的设置器,并引发事件以响应用户操作。视图实现了允许在测试表示模型时轻松存根的接口。 Presentation Model 将观察视图并通过更改任何适当的状态并重新加载整个视图来响应事件。因此,无需实际的 UI 类即可轻松测试同步代码。
如果表示模型是同步的,我不完全理解它与 MVP(被动视图)有何不同。他的article about Passive View 展示了一个使用同步更新视图的示例。
那么表示模型引用视图(和同步)的表示模型模式是否与 MVP(被动视图)相同?
【问题讨论】:
-
我认为 Presentation Model 模式是 MVVM 模式组的一部分,而不是 MVP 组。此外,当您开始将此模式与广泛使用绑定的框架(如 WPF)一起使用时,它与 MVP 的区别会变得更加清晰。
-
@DavidOsborne 根据 Martin Fowler 的说法,它们是不同的模式。我对此没有异议。但是,我看不出演示模型与演示模型(与视图相反)和被动视图中的同步有什么区别。如果您要告诉我使用被动视图编写一个小型应用程序,然后再次使用演示模型和演示模型中的同步,我会以同样的方式编写它......
-
作为演示者,您不会在被动视图中包含大量操纵视图的代码。在 MVVM 视图模型中,不会有任何此类代码,因为视图将绑定到视图模型公开的数据和行为。
-
@DavidOsborne 我不确定我是否理解。在我在问题中引用并引用的文章中,Fowler 指出表示模型可以负责与视图同步。 MVVM 在视图绑定到 VM 方面略有不同。在 Fowler 描述的 Presentation Model Pattern 中,没有来自视图的绑定。 Presentation Model Pattern 和 MVVM 的区别在这篇文章中进一步解释:blogs.msdn.microsoft.com/erwinvandervalk/2009/08/14/…
-
是的,那篇 MSDN 文章指出 MVVM 是依赖于数据绑定的表示模型模式。所以我认为剩下的关键区别在于 Presentation Model 是如何设计为紧密建模视图的,而 MVP Presenter 没有这样的义务。
标签: design-patterns architecture mvp presentation-model