里面做你们喜欢哪一种? 我一直在寻找到两者有一定似乎是什么人打电话给他们一些不一致。
我会尝试,并记下的区别是什么,你可以纠正我,如果我错了。
MVC
- 模型认为,以它自己的观察员(查看)引用的更新将其通知观察者模式。
- 查看通过所有事件和消息发送到控制器。 当他们通过改变已发生的模型通知视图更新他们的内容。 查看保存到控制器和模型的参考。
- 控制器保持所述模型和(有时)观。 观将调用与用户输入相对应的控制器的方法,该控制器然后maniuplates模型作为相应,有时操纵视图(上视图某些点击挡住了按钮等)
MVP
- 型号有视图中没有引用。 只为程序提供数据抽象。 模型认为没有提及任何东西。
- 如MVC意见呼吁根据用户输入相应的演示方法。 图只有给演示的参考。
- 演示者的意见和模型的参考。 当查看调用演示的方法,演示者操纵,则该模型操纵视图。
我敢肯定,我明白MVC是如何工作的,只是我的理解,如果MVP是一种前途未卜。 我真的很喜欢MVC,但这并不能坐我那么好只有一部分是模型,这应该只是数据层的抽象,还持有引用意见,但更新的事实。 这是没有意义的。
Martin Fowler的提供了一个分析 MVC和MVP,以及维基百科MVP文章提供了更多的参考。
对于我来说,有两个问题:
1)。 如何“活”是模型 - 视图关系? 如果模型动态变化,并在视图(S)必须更新以反映更改模型,然后我们有经典的MVC和模型在某种程度上改变通知的培训相关意见。 (如Struts中实现。例如)这种风格并不适用于经典的Web应用程序。 这里有典型的是作为一个(由模型提供的DTO的确经常)创建关模式的快照视图。 在很多文学网站风格仍然被称为MVC。
2)。 当用户执行“东西”,谁负责ineterpreting和作用。 在MVC这通常是控制器的工作。 MVP似乎允许从查看更直接的互动模型,这个目的(如果我理解正确福勒斯文章)。
我更喜欢的担忧完全分离 - MVC的方法是我怎么想的,但是这可能只是一个熟悉的事情。
我应该一个人挑? 一般情况下,我认为你是通过你选择使用框架驱动。 我来自一个Struts的背景下,这样的网络式MVC是很自然的我。 如果我理解正确MVP在.NET中的某些方面明确采纳。 我将与你选择的框架,顺其自然,我不会拒绝一个框架,只是因为它是MVP,而不是MVC - 即使假设一个明确的区分可能进行。
什么MVVM? (模型视图视图模型)在这种风格,模型不坚持一个观点,反之亦然任何引用。 我不会假装知道多少,因为我才刚刚开始学习它,但我们最近做了一个选择移动到这个设计模式,所以我假设它确实有一些优点。
http://en.wikipedia.org/wiki/Model_View_ViewModel
在任一模式模型可以不依赖于任何其它组分。 “已经引用了”只观察对象。 它不关心,如果这些观察家们的观点,控制器或其他机型。
MVC是最断章取义的设计模式,缺乏一个真正的定义。 我将使用由Martin Fowler出版的一个。
让我们考虑一个UI /一个CRUD屏幕/为桌面应用复杂的业务对象。 (如MVC的Struts是有点不同)。 你有一个模型(业务对象)时,屏幕上的几个观点,有其自己的控制器每个视图。
用户界面逻辑(验证,从而使关于该业务对象窗口小部件)被分散在整个视图和控制器对象。 在这个意义上,MVC模式已经过时(!),虽然当时的关注点分离是革命性的,并启用更丰富的用户界面。
在MVP你有模型,视图,这是愚蠢的,所有的UI逻辑的演示中。 主持人提供与活动/事件处理程序/代表的视图元素。 因此,当用户在屏幕上相应的小部件交互的视图只回调到演示。 演示者充当调解员,如何封装小部件进行交互。
我真的建议此链接http://martinfowler.com/eaaDev/uiArchs.html 。 整个MVC话题并不那么容易,因为它可能声音。 这几乎是对自己的理论。
假设我的理解是正确的,型号不应该坚持在MVP或MVC视图的参考。
我要说的是,虽然,你的MVC / MVP究竟应该如何实现定义可能比下一个家伙略有不同。 我觉得模式是有关注分离的总体思路,但可以调整以适应正是你需要的具体实施。
我认为这取决于你所在的环境,在网络环境中,控制器选择哪个视图显示,作为请求的结果。 在这之前,控制器检查,如果有模型中的任何改变。 换句话说,认为需要与模型没有直接联系。