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

时间:2014-03-01 12:55:05

标签: template-engine thymeleaf

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

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

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

这与Thymeleaf的想法相反,Thymeleaf鼓励我创建完整的html页面(包括示例菜单和所有标题)。虽然Thymeleaf的手册继续强调这是多么伟大,但它从不涉及代码重复问题:

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

我误解了那里的东西吗?或者这确实是一种权衡吗?如何最大限度地减少代码重复的影响?

1 个答案:

答案 0 :(得分:7)

自然模板只是Thymeleaf的一个选项。你可以在这里阅读http://www.thymeleaf.org/layouts.html,有许多选项,包括你喜欢的层次布局方法(我建议你看一下布局方言)。

然而,自然的模板的首选和最解释布局选项,因为Thymeleaf是从底层以为最多的允许您的做静态的原型(与大多数其他模板引擎)。但它并没有强迫你

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

通过这种方式,您可以充分利用这两个方面:在程序员,设计师和客户之间交换完全可显示页面的方法,以获得真正相关的页面;以及减少重复的代码量。

更重要的是,得益于像百里香库(以上链接的文章中引用),你甚至可以避免代码重复彻底,让您的片段通过JavaScript动态插入时,您可以直接在浏览器中打开模板而不运行的应用程序。

希望这有帮助。

免责声明,根据StackOverflow规则:我是百里香的作者。