自然模板(例如Thymeleaf)时如何处理代码重复?

Posted

技术标签:

【中文标题】自然模板(例如Thymeleaf)时如何处理代码重复?【英文标题】:How to deal with code duplication when natural templating (e.g. Thymeleaf)? 【发布时间】:2014-03-01 12:55:05 【问题描述】:

Thymeleaf 非常强调“自然模板”,这意味着所有模板都已经是有效的 Xhtml 文件。我一直认为这是向前迈出的一大步,我可以在模板中生成片段,例如在 JSP 中我会写

<tagfile:layout title="MyPageTitle">
  <jsp:body>
     Main content goes here
  </jsp:body>
</tagfile:layout>

我的“布局”-Tagfile 包含所有标题标签(标题、样式表的链接、...)、菜单并在正确的位置插入标题文本和正文。在设计我的 html 片段时,我不需要了解有关样式表菜单等的任何知识。

这与 Thymeleaf 的想法形成鲜明对比,Thymeleaf 鼓励我创建完整的 html 页面(包括示例菜单和所有标题)。虽然 Thymeleaf 的手册继续强调这是多么棒,但它从不处理重复代码问题:

我有一个生成菜单的模板,而我的所有其他模板(可能很多)都包含一个复制和粘贴的虚拟菜单,这样我就可以在没有服务器端生成机制的情况下在浏览器中查看模板。如果我有 100 个模板,这意味着可能存在完全相同的虚拟菜单 100 倍(在每个模板中)。如果我更改菜单的外观,创建新的虚拟菜单并没有完成,但我需要将新的虚拟菜单复制并粘贴到 100 个模板中。 即使我决定做一些简单的事情,比如重命名我的 CSS 文件,我也需要修改我的所有模板。 总是存在这样的危险,即我的模板在浏览器中看起来还不错,但生成的输出却被破坏了,因为......好吧......我破坏了它(可能就像拼写错误的变量名一样简单)。因此,无论如何我都需要使用实际生成来测试输出。

我是不是误会了什么?或者这确实是一种权衡?您如何最大限度地减少代码重复的影响?

【问题讨论】:

【参考方案1】:

自然模板只是 Thymeleaf 中的一个选项。正如您在这里看到的http://www.thymeleaf.org/layouts.html 有很多选择,包括您似乎更喜欢的分层布局方法(我建议您查看布局方言)。

但是,自然模板是首选且解释最多的布局选项,因为 Thymeleaf 从一开始就被认为允许您进行静态原型设计(与大多数其他模板引擎相比)。但它不会强迫你这样做。

那么.. 在现实世界中如何应用自然模板以避免代码重复成为问题?这取决于场景,但我们经常看到的一种模式是人们为 3-4 甚至十几个应用程序模板创建完整的文档、自然模板,只有那些更有可能参与设计过程的模板-- 与设计师、客户交流...-- 并且根本不在应用程序的其余模板中应用重复的页眉和页脚,从而使它们的创建和维护更加简单。

这样您就可以两全其美:一种在程序员、设计师和客户之间交换完全可显示页面的方法,以获得真正相关的页面;并且还减少了重复代码的数量。

更重要的是,多亏了 Thymol 之类的库(在上面链接的文章中引用),您甚至可以完全避免代码重复,当您直接在浏览器中打开模板而不运行应用程序时,允许通过 javascript 动态插入片段。

希望这会有所帮助。

免责声明,根据 *** 规则:我是 thymeleaf 的作者。

【讨论】:

以上是关于自然模板(例如Thymeleaf)时如何处理代码重复?的主要内容,如果未能解决你的问题,请参考以下文章

执行 Flux.map() 时如何处理错误

从 API 接收时如何处理 blob 存储 url

制作决策树时如何处理数据

db关闭时如何处理flyway

使用app.get调用错误端点时如何处理?

使用to_csv时如何处理pandas内存错误?