什么是“真正的”MVC模式?

4
当我在Google上搜寻“mvc php”相关的解释和教程时,我浏览了前4页所有链接并做了笔记。我发现MVC有4种不同的解释方式。虽然理论上它们都是相同的,但由于编程中大多数模式都有不同的名称,所以我想知道为什么这四种明显不同的模式都被称为同一名称。(需要注意的是,使用相同方法论的第五种模式被称为MVP)。我找到的4种模式如下(希望我的ASCII图表达得清楚):
U --> C --> M --> V --> U


      V --> U
      ^
      |
U --> C <-> M


            U
            ^
            |
U --> C --> V <-> M


      M <-> V --> U
      ^     ^
      |     |
U --> C ----|

其中 U = 用户(User)


1
你有关于这些模式中的一个或多个具体的问题吗?你可以提出来问一下吗?否则,这只是语义学上的区别。 - Robert Harvey
第二种描述对我来说最有意义。第三和第四种看起来像胡言乱语,除非它们指的是使用模型作为视图模型DTO或类似东西的特定框架。这实际上是我在解释该模式时发现的最大变量。有些人认为“模型”是发送到视图的裸视图绑定对象。其他人认为“模型”是代表业务逻辑的丰富领域对象。我属于后者的阵营。 - David
@RobertHarvey:没有具体的例子或问题。我不明白这怎么只是“语义学”?在我看来,每个模式都是一种不同的实现方式。如果这4个差异是语义上的差异,那么MVP和MVVM也只是语义上的差异吗? - Bert
好的。你的目标是什么?如果我们知道了,或许我们可以更好地为你提供建议。MVP和MVVM有特定的用例。MVC也是如此。 - Robert Harvey
MVC是当今的一个流行词汇(http://stackoverflow.com/questions/1549857/simple-php-mvc-framework)。因此,实际MVC和Web/Faux-MVC之间的描述自然会有所不同。 - mario
1
@RobertHarvey:我的目标是理解MVC模式。事实上,不同的人对MVC的解释不尽相同,而且似乎没有人解释为什么会这样(事实上,似乎没有人暗示其他人的解释不同),这让人感到困惑。 - Bert
1个回答

4

MVC是一种适应于其使用环境的模式,因此没有“真正”的MVC模式,只有在特定环境中使用的MVC模式。

MVC最初是在Smalltalk中开发的,但Smalltalk是一种独特的语言,提供了大多数其他语言不可用的功能。

MVC的维基百科条目已经很好地概括了它。


好的,那么存在多种模式的事实只是因为“原始模式”从未被严格定义,并且在不同领域发展出了多种思路? - Bert
@Evert - 不,它在维基百科链接中引用的论文中已经定义得很清楚了。但是,不同的环境需要对其进行修改以使其适用于这些情况。 - Erik Funkenbusch
好的,谢谢。对我来说有点奇怪,所有我能找到的页面都坚定地认为他们的模式是唯一的,而忽略了其他的。但现在对我来说已经很清楚了。 - Bert
程序员推崇自己选择的平台并贬低其他所有平台?!绝不可能! - citizenen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接