模板引擎是什么?
模板引擎是以业务逻辑层和表现层分离为目的的,将规定格式的模板代码转换为业务数据的算法实现。
它可以是一个过程代码、一个类,甚至是一个类库。不同的模板引擎其功用也不尽相同,但其基本原理都差不多。
模板引擎的基本机理就是替换(转换),将指定的标签转换为需要的业务数据;将指定的伪语句按照某种流程来变换输出。
最低限度的模板引擎就类似于如下代码的实现:
1 const string message = "{Person}喜欢{Color}";
2 var msg = message.Replage("{Person}", person).Replage("{Color}", color);
实际上,我们在开发过程中已经在很多地方不自觉的在使用模板机制了。只不过对于如上的代码,
在C#里面有更好的String.Format()可以使用,它自身也是实现了一套模板引擎。
按照具体的实现方式,我将模板引擎分成了三个基本类型:
置换型模板引擎。置换就是将规定好的文本标记替换为目标内容。这种模板引擎实现简单,除了标签替换之外,很少支持诸如子模板引用、流程控制等。正如上面所说,我们几乎天天都在使用这种模板引擎。置换型模板引擎通常用于业务逻辑不是很复杂的项目,比如生成短信、生成电子邮件,甚至有很多代码生成器也在用它。可以说,置换型模板引擎的思想是整个模板引擎界的基础。
解释型模板引擎。解释型模板引擎的原理还是标记置换。只不过有了解释器的存在,可以支持更加复杂的标记和语法。后面我们将会介绍一种使用反射机制实现的非常好用的模板引擎。大家都知道,在编程语言中,解释型语言和编译型语言相比行嫩会差出很多,这主要得看解释器如何优化了。
编译型模板引擎。编译型模板引擎是相对于解释型模板引擎来说的,实际上定名为编译型模板引擎也不太合适,但我也没想到别的好名字,哈!我们将要介绍的编译型模板引擎是Asp.Net网站开发专用的。它通过解析引擎和一系列的算法将我们定义的模板转换为.aspx文件,然后直接访问.aspx文件即可。
模板引擎的应用
在很多时候,模板引擎都是为了实现业务逻辑层和表现层的代码分离,以便于协同开发的。然而也有很多应用不仅如此,比如代码生成器,这里的代码分离实际上是为了能够获得更好的可扩展性
smarty
smarty是一个基于PHP开发的PHP模板引擎。它提供了逻辑与外在内容的分离,简单的讲,目的就是要使用PHP程序员同美工分离,使用的程序员改变程序的逻辑内容不会影响到美工的页面设计,美工重新修改页面不会影响到程序的程序逻辑,这在多人合作的项目中显的尤为重要。