OffTopic:你会认为HTML + CSS + Webserver是MVC吗?

时间:2008-11-06 08:14:28

标签: html css model-view-controller

这些只是我的想法,我想我会分享它们......

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

如果您已经知道我要去哪里,我很有兴趣听取您对此事的看法。当然,MVC适用于服务器端机制以及所有这些,但在这里与我一起开箱即用。

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

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

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

有道理吗?不?

谢谢,

马丁

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

5 个答案:

答案 0 :(得分:4)

如果你看起来足够努力,你通常可以找到MVC。

答案 1 :(得分:1)

我同意,虽然可以争论控制器。

杰夫用point in his post

说明了ZenGarden

使用:

  • Model = HTML
  • View = CSS
  • Controller =浏览器(比网络服务器更“前端”)

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

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

ASP.Net for instance;

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

这是MVC的服务理念视角

答案 2 :(得分:1)

不,有点......

您的HTML也位于您的表示层(View),尽管您的CSS应该包含字体,颜色等表示细节。

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

但是为了遵循你的思路,我建议:

  • 型号:服务器端程序+ DBMS
  • 查看:HTML + CSS
  • Controller:Webserver

答案 3 :(得分:1)

我可以看到你的观点,但我想我会将HTML-CSS-Server / Browser更多地描述为Document-Viewer而不是MVC。如果所有内容都是静态的,则它是模型的表达式,为true,但模型嵌入标记中。即使我可以用CSS覆盖它,CSS实际上只是HTML中描述的底层表示的过滤器。 HTML描述了数据的视图以及数据本身。也就是说,我可以关闭CSS,我仍然可以查看数据。在MVC中,这是不可能的。

HTML和CSS之间也存在紧密耦合 - 两者都需要非常了解另一个。这违反了MVC的关键范例,其中组件松散耦合。特别是视图不对模型强制执行约束(除了可以查看数据的限制)。 HTML设计者被限制在CSS的域内操作或修改CSS以使其适用于HTML域。

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

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

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

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

答案 4 :(得分:0)

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

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

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