StringTemplate模板技术.docxVIP

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
StringTemplate模板技术

在模板引擎中强制模型-视图严格分离被推荐为最佳论文Terence Parr旧金山大学译注:部分翻译对照以及说明,参考文章最后的描述Translated by: Richie摘要:每一位富有经验的 web 应用开发者都主张:应当将业务逻辑和显示分离。然而几乎所有的模板引擎都允许违背这一分离原则,这极大的推动了 HTML 模板引擎的发展。这种情况主要是由于对分离缺乏形式的定义,以及担心强制分离将消弱模板的生成能力(generational power)。我将阐述严格的分离是非常有用的设计原则,通过提供有效的模板引擎能够强制分离。我使用 StringTemplate 引擎作为示例,用来建立 jG 和其它的商业网站,并解决一些重要的生成问题。我的目的是使对模板引擎的研究形式化,因此提供一个通用的术语,这个术语是一种对模板生成能力分类的方法,是对形式语言理论(formal language theory)感兴趣的补充。类似 Chomsky 的 1..3 型语法分类, 我把限制性模板(restricted template)分成三种类型,并且形式的定义分离,包括实现分离的规则。因为这篇论文提供了一个清晰的模型-视图分离定义,模板引擎设计者也许不再盲目的主张强制分离概 念。此外,给出理论论点和经验证明,程序员不再有借口混杂(entangle)模型和视图。分类和主题描述:D.3.4 [程序语言]:处理机-代码生成;D2.11 [软件工程]:软件架构-面向领域的架构,模式,语言;D1.1 [编 程技术]:应用(功能)编程常规项: 语言关键词:模板引擎,Web应用,模型-视图-控制器1. 简介 对动态生成web页面的需求,例如A上的图书显示页面,导致众多模板引擎的开发趋向于使web应用开发简单化,提高扩展性,降低维护成本,允许编码和HTML的开发并行。这种诱人的好处促进了模板 引擎的发展,这完全来自一个原则:将页面的业务逻辑声明(specification)和数据处理声明,与页面怎样显 示这些信息的声明分离。通过隔离封装的声明,模板引擎促进了组件复用,可插拔的站点外观,通用组件的单点变化(single-points-of-change),良好的系统清晰度。 我曾经跟很多经验丰富的程序员讨论过分离原则,调查过很多通用的模板引擎,这些模板引擎使用各种语言开发,包括Java、C和Perl。毫不意外,程序员赞成逻辑与显示分离是一种理想的原则。然而实际上,程序员和引擎开发者不太原意强制分离,他们担心满足这个原则会损失生成能力,导致某个关键页面无法生成。 相反,他们鼓励而不是强制要求这一原则,给自己留一个退路,避免不完善的页面生成能力。很不幸,在最终期限的压力下,只要可能,程序员会经常使用这个退路作为权宜之计,导致逻辑和显示 混杂。一个负责公司服务器数据模型的程序员告诉我,离最终期限他只有3天多时间,但如果强制他们的程序员采用分离原则,修改那些受影响的多语言页面显示需要10天。为将来的维护考虑做正确的事情,他可能面 临被解雇的风险,或者他可以通过数据模型将新的HTML输出到页面,从而保住他的工作,将这种混乱留给 以后或者其它程序员。另一种更普遍的情形是作为一个捷径,程序员将业务逻辑嵌入他们的模板中,避免更新数据模型。提供 完全图灵机式(Turing-Complete)的模板编程语言,程序员就趋向于直接在模板中需要的地方添加业务逻辑, 而不是在数据模型中完成,从模型中解耦视图。例如几乎每个模板引擎的文档都有描述,如何根据用户权限 改变显示,不是简单的向模型询问用户是否特殊,而是在模板中编码逻辑来确定用户是否特殊。如果这个特殊的定义改变了,可能系统中的每个模板都不得不修改,或者程序员可能忘了某个模板,给系统引入一个将 来随时可能出现的缺陷。通常这种捷径很快导致完全混杂的声明(entangled specification)。理想是否可能?就是说我们是否可以强制分离却又不消弱模板引擎的生成能力?限制性引擎导致一些版权归原作者所有WWW2004, May 17–20, 2004, New York, New York, USA. ACM 158113844X/04/0005.页面无法处理?通常理论跟实践是不一致的。理论表明一个完全图灵机式的模板引擎能够生成任何页面,并 且比限制性模板引擎更强大。实际中我建立web服务器的经验,例如jG(11万行),提供了有力的证 据,表明程序员实际上在这两个方面可以获得最好的效果:分离和足够的生成能力。过去五年我在构建站点 和打造我的StringTemplate模板引擎过程中,实际上是进行了一项软件设计的试验,在我的模板中严格的避免 逻辑和运算(译注:对上面例子的解释,完全图灵机式的模板引擎=自由模板引擎,例如JSP、ASP;自由

文档评论(0)

knb7332j + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档