什么是 MVC(模型视图控制器)? [关闭]

Posted

技术标签:

【中文标题】什么是 MVC(模型视图控制器)? [关闭]【英文标题】:What is MVC (Model View Controller)? [closed] 【发布时间】:2010-09-12 21:30:05 【问题描述】:

我最近听说过 MVC(模型视图控制器)这个词,但它到底是什么?

【问题讨论】:

我投票结束这个问题,因为它是一个关于编程的抽象/理论问题,它更像是 Programmers.SE 的领域而不是 Stack Overflow,但即使在那里它也被考虑广泛:the equivalent question on their site 已关闭,但读者可能仍会发现答案有用。 【参考方案1】:

您可能想在Martin Fowlers site 上查看 Martin Fowler 对 MVC、MVP 和 UI 架构的总体看法。

【讨论】:

【参考方案2】:

我喜欢 Martin Fowler 的 this article。你会看到 MVC 实际上或多或少已经死了,严格来说,在它原来的富 UI 编程领域。 View 和 Controller 之间的区别不适用于大多数现代 UI 工具包。

这个词最近似乎在网络编程界找到了新的生命。我不确定这是否是真正的 MVC,或者只是将名称重新用于一些密切相关但略有不同的想法。

【讨论】:

【参考方案3】:

MVC 是一种最初在 smalltalk 的旧时代开创的设计模式。

这个概念是模型将代表您的应用程序状态和逻辑,而控制器将处理“视图”之间的 IO。

视图是模型中状态的表示。例如,您的模型可能是一个电子表格文档,并且您可能有一个将其表示为电子表格的视图和一个将其表示为数据透视表的视图。

现代 MVC 已经被虚假的 MVC 网络垃圾污染了,所以我会让其他人回答这个问题。

【讨论】:

您发表声明“现代 MVC 已被虚假 MVC 网络垃圾污染”,然后避免解决它,而是让“其他人”来回答这个问题。为什么你有这种感觉,为什么不为我们解释一下? 我推迟到其他人,因为我知道在 10 分钟内会有 8 个答案将 MVC 等同于 Rails :) 啊,我明白了……你是说Rails 不是真的是MVC?我对 Rails 了解不多,所以我自己无法解决这个问题...... Rails 和大多数其他 Web MVC 框架将业务逻辑移动到控制器(有时是视图!),并且通常将模型用作哑数据存储。从纯粹主义者的角度来看,这不是 MVC……不管它如何工作,*** 使用的是 ASP.NET MVC……同样的想法。 我觉得这个讨论有点发人深省。 c2.com/cgi/wiki?WhatsaControllerAnyway【参考方案4】:

这是对 MVC 的幼稚描述:http://www.devcodenote.com/2015/04/mvc-model-view-controller.html

一个sn-p:

定义:这是一种将应用程序分成多层功能的设计模式。

图层:

型号 代表数据。 它充当数据库和应用程序之间的接口(作为数据对象)。 它将处理验证、关联、事务等。

控制器 它收集和处理数据。 处理执行数据选择和数据消息传递的代码。

查看 向用户显示输出。

【讨论】:

【参考方案5】:

正如您问题上的标签所述,它是一种设计模式。但这可能对你没有帮助。基本上,它是一种将代码组织成逻辑分组的方法,使各个部分保持独立且易于修改。

简化: 模型 = 数据结构 / 业务逻辑 View = 输出层(即 HTML 代码) 控制器 = 消息传输层

因此,当人们谈论 MVC 时,他们所谈论的是将代码划分为这些逻辑组,以保持其干净和结构化,并希望是松散耦合的。通过遵循这种设计模式,您应该能够构建可以将 View 完全更改为其他内容的应用程序,而无需触摸您的控制器或模型(即从 HTML 切换到 RSS)。

那里有大量的教程,只需在谷歌上搜索它,我相信您至少会找到一个用点击的方式解释它的内容。

【讨论】:

【参考方案6】:

MVC 设计模式:

4 个部分 = 用户、视图、控制器、模型。

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

型号: - 保存数据并更新有新数据/状态的模型。

查看: - 显示模型拥有的数据。

控制器: - 接受用户获取或设置信息的请求,然后分别与视图或模型进行通信。 - 它通过视图“获取”。 - 它通过模型“设置”。

【讨论】:

【参考方案7】:

到目前为止,***似乎描述得最好:

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

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

【讨论】:

【参考方案8】:

Xerox PARC 的 Trygve Reenskaug 首次描述了 MVC 或模型-视图-控制器用户界面范式。于 1981 年 8 月首次出现在 Byte 杂志第 6 卷第 8 期。

【讨论】:

施乐 PARC 还发明了 smalltalk,MVC 是它的基本概念。 这是 Reenskaug 的文章...folk.uio.no/trygver/2003/javazone-jaoo/MVC_pattern.pdf【参考方案9】:

这篇关于 Oreilly 的 What is MVC 博客文章涵盖了您。

【讨论】:

应用逻辑和业务逻辑有什么区别?因为在本文中它说模型包含业务逻辑,控制器包含应用程序逻辑。我对此感到困惑。 我认为这篇文章试图区分与您正在解决的问题直接相关的代码(即模型中的代码 - 例如计算发票总额)和负责引导请求和传递信息的代码(即控制器中的代码 - 处理获取/发布和响应格式等)。我不认为将它们称为业务和应用程序逻辑是最好的选择。【参考方案10】:

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

【讨论】:

【参考方案11】:

这是一种将应用程序(模型)的底层功能与其与用户交互的方式(视图)分离的方法。控制器协调模型和视图如何相互通信。

虽然目前风靡一时,但重要的是要记住,阻止模型本身能够准确地确定其数据如何呈现给用户可能会被视为不利因素。最明显的例子是 HTML。 HTML 的初衷是通过控制器(浏览器)将模型(HTML)与视图(呈现的网页)明确分离。这一初衷遭到了如此强烈的反对,以至于如果浏览器不能将页面像素完美地呈现为设计者所需的视图,就会受到批评。

【讨论】:

【参考方案12】:

MVC 是一种将用户界面元素划分为 3 个不同概念的方法。模型是接口操作的数据。视图是元素在视觉上(或者可能是听觉上?)的表示方式。控制器是对数据进行操作的逻辑。

例如,如果您想在 UI 中操作一些文本。一个简单的字符串可以表示数据。视图可以是文本字段。控制器是转换来自用户的输入(例如字符或鼠标输入)并对底层数据模型进行更改的逻辑。

【讨论】:

这是假的 Web MVC...在真正的 MVC 中,控制器只是简单的 IO 桥,模型负责所有数据操作。【参考方案13】:

正如许多人已经说过的,MVC 是一种设计模式。我现在正在教我的一位同事,并且是这样解释的:

Models - 数据访问层。这可以是直接数据访问、Web 服务等

Views - 应用程序的表示层。

C控制器 - 这是您的应用程序的业务逻辑。

这种模式增强了测试驱动的开发。

【讨论】:

以上是关于什么是 MVC(模型视图控制器)? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

MVC(模型-视图-控制器)- 可以用简单的术语来解释吗? [关闭]

模型-视图-控制器是糟糕的面向对象设计吗? [关闭]

Android 是不是支持 MVC(模型视图控制器)结构?

什么是MVC模型

在使用spring mvc jsp shiro生成视图之前我可以做些啥[关闭]

为啥模型在MVC模式中直接更新视图?