首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF: MVP vs MVVM

WPF: MVP vs MVVM
EN

Stack Overflow用户
提问于 2010-12-19 14:43:30
回答 2查看 10.2K关注 0票数 17

MVP和MVVM有什么区别?为什么我们使用MVP,尽管我们有三层:业务层、数据访问层和表示层?将表示层划分为MVP有什么特别的原因吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-12-19 14:59:28

MVP和MVVM都是MVC的衍生物。MVC是一种将用户表示和交互与内部表示分离的模式。

这需要三层,因为将用户交互/表示直接绑定到内部表示将导致两者相互弯曲以符合对方。在您的应用程序中,您将这些层描述为表示层、业务层和数据访问层。只有这些非常松散的描述,您才有可能描述任何MVC衍生产品,或者原始MVC模式本身。

每种派生工具之间的关键区别在于每一层对其他层的依赖,以及它们彼此绑定的紧密程度。这篇文章有一些关于差异的细节,当然它不应该被认为是权威的:

http://nirajrules.wordpress.com/2009/07/18/mvc-vs-mvp-vs-mvvm/

"... MVVM对于支持双向绑定的平台来说很有吸引力,因为它不像Presenter可以独立工作(Presenter通常需要一个视图的接口),还有一个次要的折衷是ViewModel。“

票数 18
EN

Stack Overflow用户

发布于 2021-10-01 20:16:24

我们在公司的项目中使用WPF桌面应用程序MVP,而不是内置的MVVM,主要原因是在MVP中,presenter是知道一切的主要入口点,没有人知道presenter。对于每个视图,演示者都有一个职责,那就是通过订阅视图触发的事件,从IView接口获取交互。

演示者通过封装内部视图控件的属性更新视图,如具有string属性的TextBox和具有任何集合属性的GridView

MainPresenter类的构造函数将类似于下面的MainPresenter(IMainView, IEmployeeStore, IOtherDependency,..)

MainView类的构造函数将看起来像这个MainView(IPartialViewIfExists,..),这意味着视图不知道有关Presenter的任何信息或视图层之外的任何其他东西(这与强制MainView直接耦合MainViewModel以自动执行双向数据绑定的MVVM相反)。

MVP提供的干净、松散耦合的体系结构非常强大和灵活,可以实现以下功能:

对于您的应用程序,您的应用程序可以随时使用替换图形用户界面,而无需更改演示程序中的任何内容,您还可以将图形用户界面技术更改为其他方式,例如something.

  • You或WinForms可以在不需要主应用程序的任何依赖项的单独项目中分隔您的GUI,就像presenters

  • dataAccesses

  • Your视图可用于任何其他对常规GUI有用的应用程序一样。

  • 您可以轻松地对视图、演示程序和数据访问类进行单元测试。

MVVM中的ViewModel不知道View,但我不认为这有什么帮助,因为它负责视图。视图不应该知道处理业务逻辑的presenter,而这正是MVP提供的(或者我们实现MVP的方式)。

这并不意味着MVVM是不好的。MVVM是一个很好的架构,编码速度更快,更容易上手,因为它已经在WPF和Xamarin中实现了,但正如我解释的那样,由于列出的原因,我们更喜欢MVP。

一般来说,MVP更简洁,更具扩展性,但需要更多的知识和编码经验,并且必须手动实现。MVVM已经在那里了,它很容易使用,可以让你更快地实现,但它提供了耦合,并有一些限制。它们都有自己的优点和缺点,这取决于你的需要。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4481923

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档