Presenter,Presentation Model,ViewModel和Controller之间有什么区别?

Nic*_*las 47 model-view-controller mvp design-patterns presentation-model mvvm

我很清楚这些模式中的每一个是如何工作的,并且知道它们之间的一些细微差别,但它们真的是彼此之间的差异吗?

在我看来,Presenter,Presentation Model,ViewModel和Controller本质上是相同的概念.

为什么我不能将所有这些概念归类为控制器?我觉得它可能会大大简化整个想法.

任何人都可以清楚地描述他们的差异吗?

我想澄清一点,我确实理解模式是如何工作的,并且已经在一种技术或另一种技术中实现了大部分模式.我真正想要的是某人对这些模式之一的体验,以及为什么他们不会将他们的ViewModel视为一个控制器.

我会给出一些声望点,但我正在寻找一个非常好的答案.

sup*_*jos 59

除了已经提到的精彩读物(Fowler&Miller),并从开发人员的角度回答你关于控制器/演示者/ ......之间差异的观点:

MVC中的控制器:

  • Controller是由于用户交互而被调用的实际组件.(开发人员不必编写代码来委派对Controller的调用.)

  • 控制器以某种方式从View/context/bag /中获取当前值,但你不会真的说它与View 交互.

  • 控制器最终决定将哪个View显示给用户.其中,Controller也显示了应用程序导航工作流的明确概念.

MVP中的主持人:

  • Presenter具有View调用的方法,它是在用户交互时接收控制的实际组件.(开发人员必须在视图中编写一些代码才能调用Presenter.)

  • Presenter以某种方式从View中获取当前值,或者从View中接收它们.Presenter调用View上的方法以设置其状态(填充它表示Josh Smith).Presenter调用的View方法可能在其主体中执行了几个小设置.

  • Presenter没有明确显示应用程序工作流的概念.它通常被认为是对调用View的返回控制.

PM中的PresentationModel:

  • PresentationModel具有View调用的方法,它是在用户交互时接收控件的实际组件.(开发人员必须在View中编写一些代码才能调用PresentationModel.)

  • 与Presenter相比,PresentationModel 与View的沟通更加繁琐.它还包含更多逻辑,以便计算要在View中应用的所有设置的值,并在View中实际设置它们.(那些View方法轮流几乎没有逻辑.)

  • PresentationModel没有明确显示应用程序工作流的概念.它通常被认为是对调用View的返回控制.

MVVM中的ViewModel:

  • ViewModel具有由View调用的方法(&properties set),这是在用户交互时接收控件的实际组件.(开发人员必须在View中编写一些(声明性的)代码才能调用ViewModel.)

  • 与PresentationModel相比,ViewModel没有与View明确聊天的通信(即它不会调用很多View,框架会这样做).但是它有很多属性可以通过View设置映射1到1.它仍然包含相同的逻辑来计算所有这些设置的值.

  • ViewModel未明确显示应用程序工作流的概念.它通常被认为是对调用View的返回控制.

  • 以某种方式复制Josh Smith所说的内容(http://msdn.microsoft.com/en-us/magazine/dd419663.aspx):MVVM模式是PM的一个特例,它利用了一个框架(如WPF/SL)的顺序写更少的代码.


Cam*_*and 40

Martin Fowler有一个关于UI设计模式的页面,他在其中定义并讨论了MVC,MVP和其他模式.

http://martinfowler.com/eaaDev/uiArchs.html

控制器是在控制UI激活.例如,它将处理由UI触发的任何事件并适当地处理它们.

一个主持人,另一方面是比较被动的,而只是通过UI,处理它通过演示者在服务或命令自己的事件等,或代表他们显示的数据.

视图模型是一个演示,设计用于与WPF/Silverlight中结合使用的一个具体示例.

一个演示模型是可以直接由图中呈现的模型,因此,例如,如果你的模型执行INotifyPropertyChanged数据绑定,他们将演示模型.


too*_*too 5

它们之间的区别主要在于视图中有多少代码.它们之间的选择实际上是应用技术的选择,如WFP,WinForms,ASP MVC(2).将逻辑与表示分离的基本思想是相同的.

是关于这三个的非常好的文章.

编辑:

一个多文章-比较.


Nic*_*las 5

在我看来,MVP、MVVC、MVC 和 Presentation Model 之间没有真正的概念差异。有一些细节上的差异,但最终,它们都可以继续被视为模型视图控制器设置。额外的命名只会造成混淆,我认为最好采用允许在描述控制器时有一定自由度的术语。

  • @Tower 哈哈……我是那个聪明人提出问题的人。 (15认同)
  • 这是无价的。 (4认同)
  • 依你的意见?我认为 OP 要求的是答案,而不是意见。此外,还存在明显的差异。在我看来,这个答案很糟糕。 (3认同)
  • 尽管如此,我认为这不是表达您意见的地方,这不是答案。如果它在任何地方作为问题的一部分,你会提出它(不是它是问题,但它至少提供了某种背景/背景)。 (3认同)