问与答 设计模式-Presenter,Presentation Model,ViewModel和Controller之间有什么区别?

pierson · 2020-03-06 22:13:59 · 热度: 279

我有一个很好的主意,每种模式都是如何工作的,并且知道它们之间的一些细微差别,但是它们真的彼此之间真的有很大不同吗?

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

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

谁能清楚地说明他们之间的差异?

我想澄清的是,我确实了解这些模式是如何工作的,并且已经在一种或另一种技术中实现了大多数模式。 我真正要寻找的是某人对其中一种模式的经验,以及为什么他们不将自己的ViewModel视为控制器。

我会为此给出一些声望点,但我正在寻找一个很好的答案。

猜你喜欢:
共收到 6 条回复
elvis #1 · 2020-03-06 22:14:00

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

MVC中的控制器:

  • 控制器是由于用户交互而被调用的实际组件。 (开发人员不必编写代码即可将调用委派给Controller。)

  • Controller会以某种方式从View /上下文/ bag /那里获取当前值,但是您不会真正说它与View交互。

  • 控制器最终决定向用户显示哪个视图。 在那方面,Controller也显示了应用程序导航工作流程的明确概念。

MVP主持人:

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

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

  • Presenter没有明确显示应用程序工作流程的概念。 通常将其视为将控制权返回给调用View。

PM中的PresentationModel:

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

  • 与Presenter相比,PresentationModel与View的交流更多。 它还包含更多逻辑,以便找出要在视图中应用的所有设置的值,并在视图中实际进行设置。 (这些View方法又几乎没有逻辑。)

  • PresentationModel没有明确显示应用程序工作流程的概念。 通常将其视为将控制权返回给调用View。

MVVM中的ViewModel:

  • ViewModel具有被View调用的方法(设置了属性),该方法是实际组件在用户交互时接收控件。 (开发人员必须在View中编写一些(声明性)代码才能调用ViewModel。)

  • 与PresentationModel相比,ViewModel与View之间没有显式的聊天交流(即,它不会调用View太多,而框架会调用它)。 但是它具有许多属性,这些属性可通过“视图”设置将1映射为1。 它仍然包含相同的逻辑来找出所有这些设置的值。

  • ViewModel并未明确显示应用程序工作流程的概念。 通常将其视为将控制权返回给调用View。

  • 以某种方式复制Josh Smith所说的内容([http://msdn.microsoft.com/zh-cn/magazine/dd419663.aspx):] MVVM模式是利用框架(例如WPF / SL)的PM的特例。 为了减少编写代码。

ulysses #2 · 2020-03-06 22:14:01

Martin Fowler在页面上介绍了UI设计模式,他在其中定义并讨论了MVC,MVP和其他模式。

[HTTP://Martin Fowler.com/哦啊啊Dev/UI Arch是.HTML]

控制器在控制UI中处于活动状态。 例如,它将处理由UI触发的任何事件并进行适当处理。

另一方面,Presenter则比较被动,仅通过UI来显示数据,该UI处理其自身的事件等,或通过Presenter将数据委托给服务或命令。

ViewModel是Presenter的特定示例,设计用于WPF / Silverlight绑定。

Presentation Model是可以由视图直接呈现的模型,因此,例如,如果您的模型实现INotifyPropertyChanged进行数据绑定,则它们将是Presentation Models。

saxon #3 · 2020-03-06 22:14:03

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

这是关于这三个方面的非常好的文章。

编辑:

另一篇文章-比较。

tasos #4 · 2020-03-06 22:14:04

至少在.Net中,MVP被用作设计模式。 这通常与Windows Forms应用程序或经典ASP.Net一起使用。 对于MVC和MVVC,它们通常与ASP MVC一起使用,ASP MVC使用的架构与普通ASP.Net完全不同。

lenard #5 · 2020-03-06 22:14:05

我认为,MVP,MVVC,MVC和Presentation Model之间没有真正的概念差异。 有一些详细的区别,但是最后,可以将所有这些继续视为Model View Controller设置。 额外的命名只会造成混乱,我认为最好采用在描述控制器时要有一定程度的自由度的术语。

ved #6 · 2020-03-06 22:14:12

MVP和MVVM之间的一个重要区别是,视图在更新中间层时不具有主动作用,并且是“笨拙的”参与者,因为视图应用于显示而不是行为。对于“复杂”的视图,建议使用Presenter,即:

  • 当您通过更改“活动”(“导航”)来处理点击时,使用Presenter会更容易
  • 根据数据层更新(asynch)修改视图更改将最好用ViewModel实现

参考:

[HTTPS://developer.Android.com/topic/libraries/architecture/life cycle#两次-不怕]

[HTTPS://Android.进了绿色.EU/why-to-choose-MV VM-over-MVP-Android-architecture-33从0发2的5516]enter image description here

enter image description here

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册