1

简而言之,MVC 是将内容(模型)与表示(视图)分离的模式,并有一个机制(控制器)来定义如何收集两者。

如果您已经看到我的目标,我很想听听您对此事的看法。当然,MVC 适用于服务器端机制和所有内容,但请与我一起跳出框框思考一下。

网络的“访问者”,无论是人类还是机器人/谷歌,都可能会看到 HTML 及其附带的内容。多年来,编写结构化和有意义的 HTML 以及使用 CSS 将其与表示分离变得越来越重要,而 HTML5 等未来技术只会通过提供更以内容为中心的元素集和使用机制来促进这种分离。纯粹的视觉表现。

考虑到这一切,我想知道在某种程度上说 MVC 范式也适用于前端是否正确,其中:

  • 该模型将是 HTML,就像它已成为的纯 httpwise 内容一样
  • 视图是 CSS;它使您的内容以某种方式呈现
  • 控制器是网络服务器和所有位于其下的东西,它收集和分离模型和视图,并执行所有决策

说得通?不是?

VonC 向我指出了一篇文章,该文章确实改变了我对控制器部分的看法。浏览器也占据了控制器的主要部分,因为它处理大量的用户交互以及模型和视图如何协同工作。

4

5 回答 5

4

如果你足够努力,你通常可以在任何东西中找到 MVC。

于 2008-11-06T10:27:29.987 回答
1

我会同意,尽管有人可以争论控制器。

Jeff在他的帖子中说明了这一点,ZenGarden

和:

  • 模型 = HTML
  • 视图 = CSS
  • 控制器 = 浏览器(比网络服务器更“前端”)

实际上,这是从客户端的有效视角。

服务器端(比简单的 html 页面服务器更复杂的服务器)来看,MVC 会有所不同。

ASP.Net 为例

  • 模型 = 不包含在视图或控制器中的所有应用程序逻辑。该模型应该包含您所有的应用程序业务逻辑和数据库访问逻辑。例如,如果您使用 LINQ to SQL 访问您的数据库,那么您将在 Models 文件夹中创建您的 LINQ to SQL 类(您的 dbml 文件)
  • 视图 = 发送到浏览器的 HTML 标记和内容,以及脚本
  • Controller = 负责控制用户与 MVC 应用程序交互的方式。当用户发出浏览器请求时,控制器确定向用户发送回什么响应。控制器只是一个类(例如,Visual Basic 或 C# 类)。

那是 MVC 的服务端视角

于 2008-11-06T08:17:31.717 回答
1

不,有点...

您的 HTML 也在您的表示层(视图),尽管您的 CSS 应该包含表示细节,如字体、颜色等。

您的模型必须包含您的数据 + 业务逻辑,我真的不希望您将这些存储在 HTML 中——这是用于真正的编程语言、存储过程和要处理的 DBMS。这些应该在服务器端。

但是按照您的思路,我建议:

  • 模型:服务器端程序+DBMS
  • 视图:HTML+CSS
  • 控制器:网络服务器
于 2008-11-06T08:41:17.050 回答
1

我明白你的意思,但我认为我会将 HTML-CSS-Server/Browser 描述为 Document-Viewer 而不是 MVC。如果所有内容都是静态的,那么它是模型的表达,是的,但是模型嵌入在标记中。尽管我可以用 CSS 覆盖它,但 CSS 实际上只是 HTML 中描述的底层表示的过滤器。HTML 描述了数据的视图以及数据本身。也就是说,我可以关闭 CSS 并且仍然可以查看数据。在 MVC 中,这是不可能的。

您的 HTML 和 CSS 之间也存在紧密耦合——两者都需要非常了解对方。这违反了 MVC 的关键范例,其中组件松散耦合。特别是视图对模型没有任何约束(除了数据可见的限制)。HTML 设计者被限制在 CSS 域内操作或修改 CSS 以使其适用于 HTML 域。

此外,HTML 无法对数据进行操作以进行持久更改。该模型的一个关键方面是执行业务规则的能力。HTML 不会对静态内容执行此操作——Web 设计人员通过选择 HTML 编码来执行此操作。

这不会使它变坏或无用。并非所有东西都必须是 MVC。MVC 仅描述了一种组织数据和代码的特定方式。它在解耦架构和可测试性方面具有一些特殊优势,但这并不意味着它是唯一可用的有效架构模式。

在我看来,静态 HTML 内容不是 MVC,也不需要是。

[编辑] 我并不是说您不能在浏览器设计中使用 MVC,或者 MVC 不适用于在浏览器中显示静态内容。我真的是从内容提供者的角度来看待这个问题,而不是浏览器程序员。MVC 可能是浏览器设计的完美逻辑选择。

于 2008-11-06T08:51:45.517 回答
0

CSS 绝对不是视图。相反,浏览器的渲染(将 HTML/DOM 和 CSS 输入结合到 2d 布局中)是视图。HTML/DOM 是模型。控制器一半内置在浏览器 UI 中,但可以使用 javascript 进行扩展。

确实,在讨论内容/表示分离时,CSS 被认为是表示层——但这是一个不同的(正交)模型。

在 MVC 中,CSS 与 HTML/DOM 一起是模型的一部分,因为它是可以在不同视图中呈现的底层数据。例如,打印布局是基于相同模型的单独视图。

于 2008-11-06T08:40:22.403 回答