我有一个很好的主意,这些模式中的每种模式如何工作并了解它们之间的一些较小差异,但是它们真的彼此之间有什么不同吗?

在我看来,演示者,演示模型,ViewModel和Controller本质上是相同的概念。

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

谁能清楚地描述他们的差异?

我想澄清一下,我确实了解了模式的工作原理,并在一种技术或另一种技术中实施了大多数。我真正在寻找的是某人对其中一种模式的经验,以及为什么他们不将视图模型视为控制器。

我为此给出一些声誉点,但我正在寻找一个非常好的答案。

有帮助吗?

解决方案

除了已经提到的出色读物(Fowler&Miller),还回答您关于控制器/演示者/ ...的差异的观点。 从开发人员的角度来看:

MVC中的控制器:

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

  • 控制器以某种方式从视图/上下文/包/其他任何方式获取当前值,但是您不会真正说 互动 有了视图。

  • 控制器决定最终将显示给用户的视图。在此,控制器也显示了应用程序导航工作流的明确概念。

MVP中的主持人:

  • 主持人的方法是通过视图调用的方法,这是在用户交互时接收控制的实际组件。 (开发人员必须在视图中编写一些代码才能致电主持人。)

  • 主持人以某种方式从视图中获取当前值,或者在呼叫时从视图中接收它们。主持人调用视图上的方法以设置其状态(填充它 乔什·史密斯说)。主持人调用的视图方法 可能 体内有几个小设置。

  • 主持人不会明确显示应用程序工作流程的概念。通常被认为是返回对呼叫视图的控制。

PM中的呈现模型:

  • 呈现模型具有通过视图调用的方法,这是在用户交互时接收控制的实际组件。 (开发人员必须在视图中编写一些代码才能调用显示模型。)

  • 呈现模型还有更多 健谈 与演示者相比,与视图的沟通。它还包含更多的逻辑,以找出在视图中应用的所有设置的值,并实际设置视图中的设置。 (这些视图方法依次几乎没有逻辑。)

  • 呈现模型不会明确显示应用程序工作流程的概念。通常被认为是返回对呼叫视图的控制。

MVVM中的ViewModel:

  • ViewModel具有通过视图的调用(&属性集)的方法,该方法是在用户交互时接收控制的实际组件。 (开发人员必须在视图中编写一些(声明性的)代码才能调用ViewModel。)

  • 与显示模型相比,ViewModel与View没有明确的Chatty通信(即,它没有经常调用视图,框架可以做到这一点)。但是它具有许多属性,这些属性将1比1映射到视图设置。它仍然包含相同的逻辑,以找出所有这些设置的值。

  • ViewModel不会明确显示应用程序工作流程的概念。通常被认为是返回对呼叫视图的控制。

  • 以某种方式复制乔什·史密斯(Josh Smith)所说的话(http://msdn.microsoft.com/en-us/magazine/dd419663.aspx):MVVM模式是PM的一种特殊情况,它利用框架(例如WPF/SL)来编写更少的代码。

其他提示

马丁·福勒(Martin Fowler)有一个关于UI设计模式的页面,他在其中定义了该图案,然后谈论MVC,MVP和其他模式。

http://martinfowler.com/eaadev/uiarchs.html

一个 控制器 活跃于控制UI。例如,它将处理UI触发的任何事件并适当地处理它们。

一个 主持人 另一方面,更具被动性,只需通过UI显示数据,该数据处理其自己的事件等,或通过主持人将其委派给服务或命令。

一个 ViewModel 是演讲者的特定示例,该示例旨在与WPF/Silverlight绑定一起使用。

一个 演示模型 是可以通过视图直接呈现的模型,因此,例如,如果您的模型实现了用于数据绑定的InotifyPropertychange,则它们将是演示模型。

它们之间的区别在于观点的代码数量。它们之间的选择实际上是用于应用程序的技术选择,例如WFP,Winforms,ASP MVC(2)。将逻辑与演示分开的基本思想是相同的。

这里 都是关于这三个的非常好的文章。

编辑:

更多文章 - 比较。

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

我认为,MVP,MVVC,MVC和演示模型之间没有真正的概念差异。有一些详细的差异,但最后,可以继续将其视为模型视图控制器设置。额外的命名只是造成混乱,我认为最好采用术语来描述控制器时有一定程度的纬度。

仅在MVP和MVVM之间的一个重要区别是该视图在更新中层中没有积极作用的方式,并且是“愚蠢的”演员,因为视图应该用于显示,而不是行为。建议使用演示者来了解“复杂”的观点,即:

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

参考:

https://developer.android.com/topic/libraries/architecture/lifecycle#lc-bp

https://android.jlelse.eu/why-to-choose-mvvm-over-mvp-android-archituction-33c0f2de5516 enter image description here

enter image description here

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top