【发布时间】:2014-09-19 17:27:43
【问题描述】:
无逻辑模板(如小胡子/车把)的编程原理是什么?为什么故意限制模板语言的功能被这些无逻辑模板库的制造商和用户认为是一种良好且理想的设计模式?
我最近在一个小项目中使用 node.js 和车把,我发现我经常因车把模板中缺乏简单的逻辑而受阻。
在我放弃手把模板引擎以寻找具有更强大逻辑功能的模板引擎之前,我想了解使用无逻辑模板语言背后的编程原理。
我应该澄清一下,我并不是在征求人们对哪种模板语言更好的意见。我在问人们设计、构建和使用无逻辑模板的客观原因是什么。
这是一个相当简单的示例,说明我希望模板能够自行处理,但我不知道在把手中如何处理,所以我不明白为什么它被认为是“无逻辑”的理想特性" 模板本身无法处理如此简单的 UI 演示。由于有许多无逻辑的模板选择,我假设有一些我想了解的有用原因。
我有两个来自可能应用程序状态的变量传递给模板:
fanOn // boolean: true or false
fanControl // three states: "on", "off", "auto"
fanOn 代表我正在控制的某些风扇的当前状态
fanControl 描述了风扇处于哪种控制模式。“开”表示它们是手动打开的,并将保持这种状态,直到另行通知。 “关闭”表示它们被手动关闭并将保持这种状态,直到另行通知。 “自动”表示它们处于自动恒温/软件控制之下。
如果风扇打开,我想显示一个按钮来手动关闭它们。
如果风扇关闭,我想显示一个按钮来手动打开它们。
如果 fanControl 设置打开或关闭,我想显示一个按钮将其设置回自动。
因此,总是有一个“打开”或“关闭”按钮,如果它不处于“自动”模式,则有一个“设置回自动”按钮。
这里没有业务逻辑,只是根据当前状态构建适当的表示。
以下是我在该主题上找到的各种参考资料(其中包含观点和事实的组合 - 读者必须弄清楚哪个是哪个):
- Enforcing Strict Model-View Separation in Template Engines
- What are the benefits of logic-less templates like {{Mustache}}?
- The Case Against Logic-Less Templates
- Cult of Logic-less Templates
- Logic-less Template Redux
- Your templating engine sucks and everything you have ever written is spaghetti code (yes, you)
- Simple is better - Template Engines
- Mustache is logic-less but the logic has to go somewhere
- 3 Reasons to choose Logic Less templates like Mustache
- Dust is eloquent – the logic wars - Paypal Engineering Blog
【问题讨论】:
-
这是业务逻辑:您有 2 个 UI 显示,一个在自动模式下,一个在非自动模式下。控制器应在两者之间进行选择。选择不是视图的工作。视图应该只是将内容绘制到屏幕上。
-
请注意,如果两个模板彼此共享很多东西,大多数模板引擎都具有允许您重构它们的功能。
-
@slebetman - 我认为模板的工作是决定如何准确呈现 UI。是否应该使用按钮、单选组、下拉菜单等...?我看不出为什么 javascript 收集页面将代表的数据需要参与按钮、单选组或下拉列表。就我而言,这是模板的工作来保持适当的设计。是的,Handlebars 模板确实有“部分”,其中包含可在多个地方使用的可重用 HTML 片段。我在适当的地方使用它们——尽管我认为这与这里无关。
-
去阅读cs.usfca.edu/~parrt/papers/mvc.templates.pdf 以获得关于为什么无逻辑模板是一件好事的优秀学术处理。这一切都与模型视图分离有关。
-
@jfriend00:阅读 MVC 设计模式。 MVC 来自 smalltalk 和 veiw 层,没有模板,而是 smalltalk 代码。策略仍然是只在视图中调用 UI 函数,让控制器来做所有的决定。
标签: node.js handlebars.js mustache