当前位置: 首页 > 面试题库 >

MVP和MVC有什么区别?

彭洲
2023-03-14
问题内容

想要改善这篇文章吗? 提供此问题的详细答案,包括引文和答案正确的解释。答案不够详细的答案可能会被编辑或删除。

当超越RAD(拖放和配置)构建用户界面的方式时,许多工具鼓励您使用三种设计模式,分别称为Model-
View-
Controller

,Model-
View-
Presenter和Model-
View-ViewModel。我的问题包括三个部分:

  1. 这些模式解决了哪些问题?
  2. 它们有何相似之处?
  3. 它们有何不同?

问题答案:

模型视图展示者

MVP中
,Presenter包含视图的UI业务逻辑。View委托的所有调用均直接传递给Presenter。演示者也直接从视图中分离出来,并通过界面与之对话。这是为了在单元测试中模拟View。MVP的一个共同属性是必须有很多双向分配。例如,当有人单击“保存”按钮时,事件处理程序将委托给演示者的“
OnSave”方法。销售完成后,演示者将通过其界面回调视图,以便视图可以显示保存已完成。

MVP往往是在WebForms中实现独立表示的一种非常自然的模式。原因是View总是首先由ASP.NET运行时创建。您可以找到有关这两种变体的更多信息。

两个主要变化

被动视图:
视图尽可能愚蠢,并且包含几乎为零的逻辑。演示者是与视图和模型对话的中间人。视图和模型完全相互屏蔽。模型可以引发事件,但是演示者订阅了这些事件以更新视图。在Passive
View中,没有直接的数据绑定,相反,该View公开了Presenter用于设置数据的setter属性。所有状态都在Presenter中管理,而不是在View中管理。

  • 优点:最大的可测试性表面;视图和模型的清晰分离
  • 缺点:在自己进行所有数据绑定时,需要做更多的工作(例如,所有的setter属性)。

监督控制器:
演示者处理用户手势。视图通过数据绑定直接绑定到模型。在这种情况下,演示者的工作是将模型传递给视图,以便可以绑定到视图。演示者还将包含诸如按下按钮,导航等手势的逻辑。

  • 优点:通过利用数据绑定,减少了代码量。
  • 缺点:由于数据绑定,可测试的表面较少,并且由于视图直接与模型对话,因此视图中的封装较少。

模型视图控制器

MVC中
,控制器负责确定响应于任何操作(包括应用程序何时加载)而显示哪个视图。这与MVP不同,在MVP中,操作通过视图路由到演示者。在MVC中,视图中的每个动作都与对控制器的调用以及一个动作相关联。在网络中,每个动作都涉及对URL的调用,在该URL的另一侧有一个Controller响应。该控制器完成处理后,将返回正确的视图。在应用程序的整个生命周期中,序列都以这种方式继续:

    视图中的操作
        ->呼叫控制器
        ->控制器逻辑
        ->控制器返回视图。

关于MVC的另一大区别是,视图不直接绑定到模型。该视图仅呈现并且完全无状态。在MVC的实现中,视图通常在后面的代码中没有任何逻辑。这与绝对必要的MVP相反,因为如果View不委托给Presenter,它将永远不会被调用。

展示模型

另一个要看的模式是 演示模型 模式。在这种模式下,没有演示者。而是,视图直接绑定到演示模型。Presentation
Model是专门为View设计的模型。这意味着此模型可以公开一个永远不会放在域模型上的属性,因为这将违反关注点分离。在这种情况下,表示模型绑定到域模型,并且可以订阅来自该模型的事件。然后,View订阅来自Presentation
Model的事件并相应地更新自身。Presentation
Model可以公开视图用于调用动作的命令。这种方法的优点是,由于PM完全封装了视图的所有行为,因此您基本上可以完全删除后面的代码。模型-视图-
视图模型。

在MSDN上有关于演示模型的文章,在WPF(前棱镜)的复合应用指南中有关于单独的演示模式的部分



 类似资料:
  • 如果我们在Google上搜索“MVC,MVP和MVVM设计模式之间的差异”,那么我们可能会得到一些从理论上讨论MVC,MVP和MVVM设计模式之间差异的URL: MVP 在无法通过“DataContext”绑定的情况下使用。Windows窗体就是一个很好的例子。为了将视图与模型分离,需要一个演示者。由于视图不能直接绑定到演示者,因此必须通过接口(IView)将信息传递给视图。 MVVM 用于可能通

  • 本文向大家介绍Spring Boot、Spring MVC 和 Spring 有什么区别?相关面试题,主要包含被问及Spring Boot、Spring MVC 和 Spring 有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 SpringFramework SpringFramework 最重要的特征是依赖注入。所有 SpringModules 不是依赖注入就是 IOC 控制反转。 当我

  • 问题内容: 我将启动一个Java项目来开发桌面应用程序。什么用作表示层模式(MVC,MVP,MVVM或…)? …如果可能的话,给出一些可行的小例子… :-) 问题答案: 其实,你在寻找最终的帖子是 这样回答 这个答案 从卡斯滕Lentzsch共同领导(JGoodies数据的名望)在 秋千框架和最佳实践 旋启式框架和最佳实践 主题。 你好, 多年来,我一直在编写Swing应用程序,很多人都觉得它很优

  • 问题内容: 应用程序上下文和Web应用程序上下文之间有什么区别? 我知道用于Spring MVC架构的应用程序吗? 我想知道应用程序中有什么用途?什么样的豆类被定义? 问题答案: Web应用程序上下文扩展了应用程序上下文,该上下文旨在与标准javax.servlet.ServletContext一起使用,因此能够与容器进行通信。 如果WebBean中实现ServletContextAware接口,

  • 问题内容: 两者都意味着空间,但是有什么区别吗? 问题答案: 一个是不间断空间,另一个是常规空间。不间断的空格表示该行不应在该点处换行,就像它不会在一个单词的中间换行一样。 此外,正如斯文德(Svend)在其评论中指出的那样,不间断的空间不会崩溃。

  • 本文向大家介绍<%# %> 和 <% %> 有什么区别?相关面试题,主要包含被问及<%# %> 和 <% %> 有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 答:<%# %>表示绑定的数据源 <%%>是服务器端代码块