MVP和MVVM有什么区别?为什么我们使用MVP,尽管我们有三层:业务层、数据访问层和表示层?将表示层划分为MVP有什么特别的原因吗?
发布于 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。“
发布于 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.
WinForms可以在不需要主应用程序的任何依赖项的单独项目中分隔您的GUI,就像presenters
dataAccesses
MVVM中的ViewModel不知道View,但我不认为这有什么帮助,因为它负责视图。视图不应该知道处理业务逻辑的presenter,而这正是MVP提供的(或者我们实现MVP的方式)。
这并不意味着MVVM是不好的。MVVM是一个很好的架构,编码速度更快,更容易上手,因为它已经在WPF和Xamarin中实现了,但正如我解释的那样,由于列出的原因,我们更喜欢MVP。
一般来说,MVP更简洁,更具扩展性,但需要更多的知识和编码经验,并且必须手动实现。MVVM已经在那里了,它很容易使用,可以让你更快地实现,但它提供了耦合,并有一些限制。它们都有自己的优点和缺点,这取决于你的需要。
https://stackoverflow.com/questions/4481923
复制相似问题