什么是MVC(模型视图控制器)?

27

我最近听到许多人在议论MVC(模型视图控制器)这个术语,但它到底是什么呢?


1
我投票将此问题标记为离题,因为它是一个有关编程的抽象/理论性问题。这种问题更适合Programmers.SE而不是Stack Overflow,但即使在那里,这个问题也被认为太过广泛:对应他们网站上的问题已经关闭,尽管读者可能仍会发现回答有用。 - Jeremy
13个回答

23
你可能想要查看 Martin Fowler 在 Martin Fowler 网站 上关于 MVC、MVP 和 UI 架构的一些观点。

11

我喜欢Martin Fowler写的这篇文章。您会发现,严格来说,MVC在其最初的富UI编程领域里实际上已经基本死亡。 在大多数现代UI工具包中,视图和控制器之间的区别并不适用。

最近,这个术语似乎在Web编程圈子里又找到了新的生命。 我不确定那是否真正是MVC,还是仅仅重新使用该名称来表示某些相关但微妙不同的想法。


7
MVC是一种最初在Smalltalk的早期被开创的设计模式。
其概念是,模型将代表您的应用程序状态和逻辑,而控制器将处理“视图”之间的输入/输出。
视图是模型状态的表示。例如,您的模型可能是一个电子表格文档,您可能有一个将其表示为电子表格和将其表示为数据透视表的视图。
现代MVC已经被虚假的MVC网络垃圾污染,所以我会让其他人来回答这个问题。

7
你说“现代MVC已经被假的MVC Web垃圾所污染”,然后避免回答这个问题,转而让“其他人”来回答。你为什么有这种感觉,为什么不阐明一下呢? 您认为“现代MVC已经被假的MVC Web垃圾所污染”,但并未详细阐述原因,而是让其他人来回答。请问您为什么有这种看法,为何不亲自解释一下呢? - Jason Bunting
1
我向他人让步,因为我知道只需10分钟就会有8个关于将MVC与Rails相提并论的答案。 - FlySwat
啊,我明白了...你是说Rails并不是真正的MVC?我对Rails不是很了解,所以我自己无法回答这个问题... - Jason Bunting
2
Rails和大多数其他Web MVC框架将业务逻辑移动到控制器(有时是视图!),通常将模型用作愚笨的数据存储库。从纯主义的观点来看,这不是MVC...但它确实起作用,Stackoverflow正在使用ASP.NET MVC...同样的想法。 - FlySwat
我觉得这个讨论有些启示性。http://c2.com/cgi/wiki?WhatsaControllerAnyway - huggie

5
这里是一个关于MVC的简单描述:http://www.devcodenote.com/2015/04/mvc-model-view-controller.html 定义:它是一种将应用程序分成多个功能层的设计模式。
这些层包括:
- 模型:代表数据,作为数据库和应用程序之间的接口(作为数据对象)。它将处理验证、关联、事务等。 - 控制器:收集和处理数据。处理数据选择和数据传递的代码。 - 视图:向用户显示输出。

3

MVC设计模式:

包括四个部分:用户、视图、控制器和模型。

用户: - 查看视图并使用控制器。

模型: - 包含数据并更新模型中的新数据/状态。

视图: - 显示模型的数据。

控制器: - 接收来自用户的请求以获取或设置信息,然后与视图或模型通信。 - 通过视图进行"获取"。 - 通过模型进行"设置"。


2
作为您问题上的标签所指示的,这是一种设计模式。但这可能对您没有帮助。基本上,它是一种将代码组织成逻辑分组的方式,以保持各个部分的独立性和易于修改。
简化来说:
- Model = 数据结构 / 业务逻辑 - View = 输出层(即HTML代码) - Controller = 消息传输层
因此,当人们谈论MVC时,他们讨论的是将代码划分为这些逻辑组,以保持其整洁和结构化,并希望松耦合。通过遵循这种设计模式,您应该能够构建应用程序,可以完全更改其视图而无需触及控制器或模型(例如从HTML切换到RSS)。
有大量的教程可供参考,只需在谷歌上搜索,我相信您至少会找到一个与您理解相符的解释。

1

维基百科目前似乎描述得最好:

http://en.wikipedia.org/wiki/Model-view-controller

模型-视图-控制器(MVC)是软件工程中使用的一种架构模式。成功使用该模式将业务逻辑与用户界面考虑因素隔离,从而产生一个应用程序,使得更容易修改应用程序的外观或基础业务规则而不影响另一个方面。在MVC中,模型表示应用程序的信息(数据)以及用于操作数据的业务规则;视图对应于用户界面的元素,例如文本、复选框项等;控制器管理涉及用户动作通信模型的详细信息,例如按键和鼠标移动。


1

MVC或Model-View-Controller用户界面范例最初由Xerox PARC的Trygve Reenskaug描述。它首次出现在1981年8月的Byte杂志第6卷第8期中。


施乐帕克研究中心还发明了Smalltalk,而MVC是其基本概念。 - FlySwat
这是Reenskaug的文章...http://folk.uio.no/trygver/2003/javazone-jaoo/MVC_pattern.pdf - dacracot

0

MVC是一种软件架构模式,它将表示与用户交互分离开来。 通常,模型由应用程序数据和与之交互的函数组成,而视图将此数据呈现给用户;控制器在两者之间进行调解。


0
这篇 Oreilly 上的 MVC 是什么 博客文章已经为你提供了详细的解释。

应用逻辑和业务逻辑有什么区别?因为在这篇文章中,模型包含业务逻辑,控制器包含应用逻辑。我对此感到困惑。 - Jaywith.7
我认为这篇文章试图区分与你正在解决的问题直接相关的代码(即模型中的代码,例如计算发票总额),以及负责指导请求和传递信息的代码(即控制器中的代码,处理get/post和响应格式等)。我认为称它们为业务逻辑和应用逻辑并不是最恰当的措辞。 - Chris Cherry

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