【问题标题】:Presentation Model vs MVP (Passive View)演示模型与 MVP(被动视图)
【发布时间】: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


【解决方案1】:

Model-View-Presenter 是一种架构模式,它定义了 UI 级别的行为和逻辑结构。 M-V-P 将表示的逻辑(例如与后端服务和业务层的交互)与显示按钮和界面组件的机制分开。

被动视图是模型-视图-演示者模式的一个子集。 Basic Model view presenter diagram

从外到内,被动视图的架构如下所示:

UI – The User Interface reflects what is going on beneath it by implementing one or more View interfaces
Presenter – The Presenter receives interactions from the UI or Model and updates the Views it is attached to
Model – The model is a facade or black box in our diagram, behind which is a business logic layer and data layer

在扁平架构中,我们会从接口收集数据,也许会进行一些业务和数据验证,然后使用存储过程或内联 SQL 将其直接保存到数据库中。定义数据访问层(或实体框架之类的数据模型)允许我们的应用程序在对应用程序有意义并一致存储和检索的内聚、已定义对象上进行操作。定义业务逻辑层允许我们以与业务一致且在应用程序内部一致的方式集中对应用程序中的实体进行操作的业务规则,从而将更改业务流程时发生的风险降至最低。将填充输入和响应 UI 上的按钮按下的逻辑与传达给最终用户的信息和对其输入的概念响应分开,允许系统在同一应用程序中跨任意数量的界面与用户进行一致的交互。

我的示例应用程序有几个功能性和非功能性需求:

Functional – Display product number, name, list price, and available quantity in tabular format
Functional – Provide a basic search input and button to search product names
Non-Functional – Implement an M-V-P pattern – Obviously the purpose of this whole exercise
Non-Functional – Use a simple model stack that can be easily replaced with a Service-Oriented one at a later time
Non-Functional – Build with the idea that we will later create a Silverlight or WPF front-end
Non-Functional – Make pretty pictures for article

【讨论】:

    猜你喜欢
    • 2012-07-03
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    • 2020-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多