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