gpt4 book ai didi

node.js - 无逻辑模板与模板语言中更多功能的编程原理是什么?

转载 作者:太空宇宙 更新时间:2023-11-03 22:37:00 26 4
gpt4 key购买 nike

无逻辑模板(如 mustache / Handlebars )的编程原理是什么?为什么这些无逻辑模板库的制造者和用户认为故意限制模板语言的功能是一种良好且理想的设计模式?

我最近在一个小项目中使用了 Node.js 和 Handlebars ,我发现我经常因为 Handlebars 模板中缺乏简单的逻辑而陷入困境。

在放弃 Handlebars 模板引擎以寻找具有更强逻辑功能的引擎之前,我想了解使用无逻辑模板语言背后的编程原理。

我需要澄清的是,我并不是在征求人们关于哪种模板语言更好的意见。我问的是人们设计、构建和使用无逻辑模板的客观原因是什么。

<小时/>

这是一个相当简单的示例,说明我希望模板能够自行处理,但我不知道在 Handlebars 中如何处理,所以我不明白为什么它被认为是“无逻辑”的理想特性"模板本身无法处理如此简单的 UI 呈现。由于有许多无逻辑的模板选择,我假设有一些我想了解的有用原因。

我有两个来自应用程序状态的变量被传递给模板:

fanOn       // boolean: true or false
fanControl // three states: "on", "off", "auto"

fanOn 表示我控制的某些风扇的当前打开或关闭状态fanControl 描述了风扇处于哪种控制模式。“on”表示风扇是手动打开的,并且将保持这种状态直至另行通知。 “关闭”意味着它们被手动关闭,并将保持这种状态,直到另行通知。 “自动”意味着它们处于自动恒温/软件控制之下。

如果风扇打开,我想显示一个按钮来手动关闭它们。

如果风扇关闭,我想显示一个按钮来手动打开它们。

如果 fanControl 设置打开或关闭,我想显示一个按钮以将其设置回自动。

因此,总会有一个“打开”或“关闭”按钮,如果不处于“自动”模式,则会有一个“设置回自动”按钮。

这里没有业务逻辑,只是根据当前状态构建正确的演示文稿的问题。

以下是我找到的有关该主题的各种引用资料(其中包含观点和事实的组合 - 读者必须分清哪个是哪个):

最佳答案

人们有一种倾向,尤其是对于缺乏经验的程序员来说,将业务逻辑包含在模板中。这通常被认为是不好的做法和反模式。业务逻辑属于模型层,不应该与表示/ View 层有任何关系。

极端情况下,您最终会使用 PHP - 100% 的所有代码、业务逻辑、 Controller 粘合和 View 都嵌入在 HTML 中。

为了阻止这种情况,开发了无逻辑模板,以便初级开发人员不会意外地将业务逻辑轻松地包含在 View 层中。

对于真正良好的关注点分离(单一责任),检查值以决定在屏幕上打印什么内容不是 View 层的责任。它应该在 Controller 中完成。然而,有时它确实不应该是 Controller 的工作(例如,当使用由原始元素组成的复合 UI 元素时,检查可能是实现细节的一部分)。对于这些用例,模板库提供诸如辅助方法之类的解决方法通常很有用。但这样的用例应该很少见。

如果您一直需要编写辅助方法,则可能是您不习惯将 Controller 逻辑与表示逻辑分开。因此,一些更极端的无逻辑模板语言(例如 Google 的 ctemplate)甚至不提供此类解决方法(请注意,ctemplate 早于许多较新的无逻辑模板语言)。

无逻辑语言的最新发展更加极端——无模板语言。如果模板语言根本没有语言,您只需传递正确的 JSON 数据(或其他结构化数据),模板引擎就会找到具有正确 id 或类名的匹配 HTML 元素来注入(inject)值。

关于node.js - 无逻辑模板与模板语言中更多功能的编程原理是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25939324/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com