【问题标题】:Would you consider HTML + CSS + Webserver to be MVC?你会认为 HTML + CSS + Webserver 是 MVC 吗?
【发布时间】:2010-09-21 01:00:00
【问题描述】:

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

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

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

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

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

有意义吗?不是吗?

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

【问题讨论】:

  • 刚刚添加了客户端和服务器端的视角。请查看它:您可以决定它是否仍然是您问题的“有效”答案;)
  • 这真的应该是社区维基。这更像是一个讨论而不是一个问题。

标签: html css model-view-controller


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

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

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

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

    【讨论】:

      【解决方案3】:

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

      在谈到内容/表示分离时,CSS 确实被视为 表示层 - 但这是一个不同的(正交)模型。

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

      【讨论】:

        【解决方案4】:

        不,有点……

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

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

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

        • 型号:服务器端程序 + DBMS
        • 视图:HTML+CSS
        • 控制器:网络服务器

        【讨论】:

        • 我明白你的意思。但是从访问者(用户和谷歌)的角度来看,您不会认为最纯粹的 html 本身可以被视为模型(将业务规则等排除在范围之外)吗?
        【解决方案5】:

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

        Jeff 用ZenGarden 说明point in his post

        与:

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

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

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

        ASP.Net for instance;

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

        这是 MVC 的服务端视角

        【讨论】:

        • 感谢 VonC 的文章。浏览器确实是控制器的主要部分,因为它处理了大量的交互和输入。感谢您指出这一点。
        猜你喜欢
        • 2017-09-19
        • 2014-05-13
        • 1970-01-01
        • 1970-01-01
        • 2010-09-10
        • 2014-06-07
        • 2013-02-03
        • 1970-01-01
        • 2012-11-18
        相关资源
        最近更新 更多