【发布时间】:2010-09-09 01:11:24
【问题描述】:
在 Web 应用程序中,是否可以在代码中使用 HTML(非脚本语言、Java、.NET)?
有两个主要的子问题:
- 您应该使用代码来打印 HTML,还是直接创建显示的 HTML?
- 是否应该在 HTML 页面中混合代码?
【问题讨论】:
标签: html user-interface
在 Web 应用程序中,是否可以在代码中使用 HTML(非脚本语言、Java、.NET)?
有两个主要的子问题:
【问题讨论】:
标签: html user-interface
一般来说,最好将表示 (HTML) 与逻辑(“后端”代码)分开。你的代码是解耦的,这样更容易维护。
【讨论】:
它很丑,而且不安全。但人们这样做没有任何后果。我更喜欢使用 DOM,或者至少使用旨在使用类型安全语义编写 HTML 的类。此外,将 UI 与逻辑混合并不是那么好......
【讨论】:
只要您的 HTML 编写代码与您的应用程序逻辑分开,并且保证 HTML 以某种方式格式正确,您应该没问题。
应该在基于标记的页面(即包含文字 HTML 的页面)中混合的唯一代码是用于格式化 HTML 的代码(例如,用于写出列表的循环)。
无论是将代码与 HTML 一起放入,还是使用纯代码使用带引号的字符串文字将 HTML 写出,都需要权衡取舍。
【讨论】:
不,如果您想构建良好且可维护的软件,并实现松散耦合。
【讨论】:
如果我需要生成 HTML 的方法,我通常将它们隔离在 HtmlHelpers 类中。这样您就可以保持某种级别的分离。 ASP.NET MVC 框架非常成功地做到了这一点。
【讨论】:
如果我对问题的理解正确,那么您是在问将标记与后端代码混合是否是一种好习惯。不。虽然这很常见,但这仍然是个坏主意。
您应该阅读MVC 范式以及有关此问题的现有问题,例如What is the best way to migrate an existing messy webapp to elegant MVC? 和Best practices for refactoring classic ASP?
【讨论】:
如果你的意思是在你的代码中打印出 HTML,那么没有。除非你有充分的理由不这样做,否则你应该使用templates
即使您认为您现在不需要它,您以后也很有可能需要它。也许您希望以不同于 HTML 的格式输出,或者您希望对相同的数据进行不同的表示。您通常会在以后需要这些东西,因此最好从一开始就使用这些东西。
【讨论】:
关键是将显示逻辑与其余代码分开。在任何复杂的站点中,您都会将代码与 HTML 混合在一起,但代码应仅用于显示目的。它不应该进行任何复杂的计算。
例如,模板将包含循环和条件。另外,您可能会有一个特定于 HTML 的例程库,例如基于列表对象打印出
假设您正在编写一个具有两种输出模式的应用程序:HTML 和其他模式。您将如何编写它,以避免重复代码?这可能会为您指明正确的方向。
【讨论】:
我讨厌开发人员 print() 一堆 html。这是完全没有必要的,而且在任何以红色显示打印/回显字符串的文本编辑器中看起来都很难看。
【讨论】:
构成视图的 HTML 必须以某种方式发送到浏览器。在 .net 中,每个服务器控件都会发出自己的 HTML 标记作为页面生命周期的一部分。所以是的,在服务器端代码中使用 HTML 是可以的。
也许您应该尝试遵循 ASP.net 模式。创建一堆代表 UI 元素的控件,并让它们负责根据它们的状态发出自己的 HTML。
【讨论】:
我同意其他所有人的观点,即您应该尽可能努力地将 HTML/XHTML 标记与应用程序逻辑分开。但是,有时出于各种原因,您确实需要在应用程序逻辑中生成 HTML/XHTML。
在这些情况下,我一直在尝试做的是确保将最少量的演示代码与应用程序逻辑混合,并尝试将其他所有内容迁移到演示代码中。毫无价值的是,在某些情况下,您可以将所有内容都移至表示层,但生成标记作为应用程序逻辑的一部分可能会更容易一些。在这些情况下,您最好的选择可能是走在时间上最合理的路线。
【讨论】:
我认为在业务逻辑中生成 HTML 没有任何借口。当它只是一个“快速修复”或者当你“稍后再修复它”时,甚至不要这样做,因为这永远不会发生。
从其他问题重申我的立场,在 HTML 中使用一些控制逻辑(条件、循环)来构造它是可以的。不要在 HTML 中做任何数据按摩或业务逻辑。你必须遵守纪律,但这是值得的。如果您的关注点(如逻辑和显示)分开,维护会容易得多。
【讨论】:
理想情况下,您的目标是在演示 (UI) 代码和域(业务逻辑)代码之间实现关注点分离。
您应该避免耦合这两个问题(在任一方向)的原因很简单......
您只有一个理由来更改一段代码。无论是您的 html 设计中的结构/样式更改,还是您的业务规则更改,您都应该只需要在一个地方进行更改。
在较小程度上,尽管许多纯粹主义者不同意,但通过在您的域代码中散布 HTML 代码或反之亦然,您为下一个阅读/维护它的开发人员制造了噪音。
【讨论】:
【讨论】: