MVP MVC和MVVM之间的区别

Lea*_*ner 15 asp.net silverlight wpf design-patterns winforms

伙计我经历了很多链接/博客.我看到他们中的大多数人不能用外行语言清楚地沟通,以及MVP,MVVM和MVC之间的技术差异.我知道每个角色代表什么,也参与MVP.但是,如果有人问我同样的问题,我真的不明白.为什么我不能在MvP中使用控制器而不是Presenter?为什么在MVVM中使用View Model而不是演示者,以及它有何不同?我可以在一个单一sentense说"MVC是ASP.NET优化,也有在VS模板,MVP是为WinForms和MVVM为SL/WPF优化的,因为它支持内置的绑定功能等".但我觉得这不是我必须理解的,而是详细而深刻的.有人可以通过详细的解释和用法以及选择一个的实际理由来阐明这一点.谢谢你们...

Rac*_*hel 10

我不能给你一个完整的答案,但是我很难学习其中的一些模式,并且可能能够让你对一些主要的差异有所了解.

我首先学习了MVVM,然后是MVC.我知道MVP以及它在理论上是如何工作的,但是我从来没有真正用它构建一个应用程序.

设计模式之间的最大区别似乎是谁控制应用程序流和逻辑.

MVVM中,您的代码类(ViewModels)是您的应用程序,而您Views只是一个非常用户友好的界面,它位于应用程序代码之上,允许用户与之交互.这意味着它ViewModels有一项巨大的工作,因为它们您的应用程序,并且负责从应用程序流到业务逻辑的所有事情.

使用MVC,您Views的应用程序是您的应用Controller程序流程.通常可以找到应用程序逻辑ViewModels,它被认为是MMVC的一部分(旁注:MMVC中的内容不能与MMVVM中的相同,因为MVC的M层包含的功能比MVVM的M层更多).为用户提供一个屏幕(View),他们与之交互然后向其提交内容Controller,并Controller决定谁对数据做了什么,View并向用户返回一个新内容.

我没有使用MVP,但是我对它的理解与MVC非常相似,但是针对桌面应用程序而不是客户端/服务器应用程序进行了优化.这Views是实际的应用程序,而Presenter处理应用程序事件和业务逻辑.

  • @GarrettHall谢谢,我根本不太了解MVP.我猜测"被动视图"意味着它被动地等待事件消息并像MVC的控制器那样响应它们,而"监督控制器"意味着它更像MVVM的ViewModel那样负责整个应用程序流程?有点像被动的老板,如果有问题,只能干预你的工作,或者是一个喜欢微观管理你工作的控制老板?:) (2认同)
  • 我发现这个答案非常简单并且可以说是不准确的。在 MVVM 中,VM 并不总是决定应用程序流程。例如,在 WPF 中,应用程序流程可以完全在 V 中以零代码隐藏的方式完成。这个答案中的“应用程序”意味着业务逻辑,如果是这样,您就不要将业务逻辑放在 MVVM 中的 VM 中,也不要将 MVC 中的 M 中。作者完全忽略了 MVVM 中 V 的全部要点,即通常会限制隐藏代码的数量,因此它们很难说是“相当用户友好的界面”。VM 的工作量并不大。如前所述,您限制了放置在那里的业务逻辑的数量。 (2认同)