HTML是否应该与代码共存?
在Web应用程序中,可以在代码中使用HTML(非脚本语言,Java,.NET)吗?
有两个主要的子问题:
- 我们应该使用代码来打印HTML,还是直接创建显示的HTML?
- 我们是否应该在HTML页面中混合使用代码?
解决方案
回答
通常,最好将表示(HTML)与逻辑("后端"代码)分开。代码已解耦,并且更易于维护。
回答
它很丑陋,并且不是类型安全的。但是人们这样做却没有后果。我更喜欢使用DOM或者至少使用旨在使用类型安全语义编写HTML的类。而且,将UI与逻辑混合并不是很好。
回答
只要HTML编写代码与应用程序逻辑是分开的,并且可以保证HTML的格式正确,那么我们就可以了。
唯一应在基于标记的页面中混合的代码(即包含文字HTML的页面)是用于格式化HTML的代码(例如,用于编写列表的循环)。
无论是将代码与HTML一起放入,还是使用纯代码使用带引号的字符串文字写出HTML,都需要进行权衡。
回答
不,如果我们要构建良好的和可维护的软件,并实现松散耦合。
回答
如果我需要生成HTML的方法,我通常将它们隔离在HtmlHelpers类中。这样,我们可以保持一定程度的分离。 ASP.NET MVC框架可以非常成功地完成此操作。
回答
如果我理解正确的问题,那么我们是在问将标记与后端代码混合是否是一种好习惯。不。虽然通常这样做,但这仍然不是一个好主意。
我们应该阅读MVC范例以及有关此问题的现有问题,例如,什么是将现有凌乱的Web应用程序迁移到优雅的MVC的最佳方法?和重构经典ASP的最佳做法?
回答
如果我们要在代码中打印出HTML,则不会。除非有充分的理由,否则应使用模板
即使我们认为自己现在不需要它,也总是有很大的机会以后再使用它。也许我们想要以不同于HTML的格式输出,或者我们想要相同数据的不同表示形式。通常,我们以后都需要这些东西,因此最好从一开始就使用它们。
回答
关键是要使显示逻辑与其余代码分开。在任何复杂的站点中,我们都将代码与HTML混合在一起,但是该代码仅用于显示目的。它不应该进行任何复杂的计算。
例如,模板将包含循环和条件。另外,我们可能会有一个特定于HTML的例程库,例如基于列表对象打印<option>列表。
假设我们正在编写一个具有两种输出模式的应用程序:HTML和其他输出模式。我们将如何编写它,以避免重复代码?那可能会为我们指明正确的方向。
回答
我讨厌开发人员使用print()一堆html。完全没有必要,并且在任何以红色显示打印/回显字符串的文本编辑器中看起来都很丑陋。
回答
组成视图的HTML必须以某种方式发送到浏览器。在.net中,每个服务器控件都会在页面生命周期中发出自己的HTML标记。因此,可以在服务器端代码中使用HTML。
也许我们应该尝试遵循ASP.net模式。创建一堆代表UI元素的控件,并使它们负责根据其状态发出自己的HTML。
回答
我与其他所有人都同意,我们应该尽力将HTML / XHTML标记与应用程序逻辑分开。但是,有时出于各种原因,我们确实需要在应用程序逻辑中生成HTML / XHTML。
在这些情况下,我一直试图确保将最少的表示代码与应用程序逻辑混合在一起,然后尝试将其他所有内容迁移到表示代码中。在某些情况下,我们可能会将所有内容移至表示层,这毫无用处,但是生成标记作为应用程序逻辑的一部分可能会更容易一些。在这些情况下,我们最好的选择可能是走一条在时间上最有意义的路线。
回答
我认为没有任何借口在业务逻辑中生成HTML。当它只是"快速修复"或者当我们"稍后再修复"时,甚至不要这样做,因为这永远不会发生。
要在其他问题上重申我的立场,可以在HTML中使用一些控制逻辑(条件,循环)来构造它。不要在HTML中进行任何数据按摩或者业务逻辑。我们必须受到纪律处分,但这是值得的。如果关注点(如逻辑和显示)分开,则维护会容易得多。
回答
理想情况下,目标是将表示(UI)代码和域(业务逻辑)代码之间的关注点分离。
我们应该避免将这两个问题(在任一方向上)耦合的原因很简单...
我们只有一个理由来更改一段代码。无论是来自html设计中的结构/样式更改,还是来自业务规则的更改,我们都只需要在一个地方进行更改即可。
在较小程度上,尽管许多纯粹主义者会不同意,但通过在域代码中散布HTML代码(反之亦然),则为下一个阅读/维护它的下一个开发人员制造了噪音。
回答
- 我尽量避免使用代码"直接"打印HTML。很难维护,编辑,添加样式等。在某些情况下,例如在代码中生成HTML电子邮件,我创建带有[name],[verification code]等标记的文本文件或者HTML文件。从代码中替换这些标记。这样,我们可以编辑电子邮件的样式,而无需重新编译代码。在我看来,将"表示"和"逻辑"分开是一个好习惯。
- 与#1中所述类似,在HTML中混合代码通常不是一个好习惯。但是,我的确在HTML中使用代码来处理诸如在一个页面或者多个页面上多次显示的简单动态字符串之类的事情。我认为这比为相同的确切值创建多个服务器控件更好。由于这不是混合在HTML中的代码"逻辑",所以我认为这是可以的。