Velocity在Roller中的应用

Velocityjava世界中出现比较早,也比较成熟的、性能比较好的、应用也比较广泛的模板框架。

 

所谓模板,就是定义一套不变的模型,并用其生成一些动态的东西。最常见的是应用场景是动态网页,我们知道一些网页大部分内容是不变的,只有少数内容需要改变,比如当前浏览网页的用户名等。除了这种场景,在自动生成代码方面,模板技术的应用也是常见的。

 

那么,在Rollervelocity是被用来干什么呢?简单地说,其实也是用来生成网页的。不过,除了生成网页,还要把生成的结果缓存起来。

 

本文中主要讨论Roller如何应用velocity进行设计及其启示。以下是Roller关于velocity的类图:

Roller定义了两个类:RendererRendererManager,在Roller中所有跟velocity相关的操作都从这两个类开始!

 

可能你有点疑惑,模板有很多,并且放置的地方也不同。这两个类怎么知道我要的是那个模板?

 

RendererManager的静态方法 getRenderergetRenderer(Template template)中,参数带有一些关于模板的信息,比如名称、ID等。其实,RendererManagerVelocityRendererFactory代为其干活。VelocityRendererFactory简单new 一个VelocityRenderer对象并将其返回给应用。

 

VelocityRenderer对象被实例化的时候将得到一个真正的Velocity  模板对象,真正干活的也是Velocity,不是RollerVelocityRenderer

 

VelocityRenderer是如何得到Velocity的模板对象的呢?答案是通过RollerVelocity

RollerVelocity会被实例化一个Velocity引擎,并且通过Velocity的专有配置文件Velocity.properties文件确定有那些渠道可以取到模板!见类图中的ResourceLoader实现类。

 

启示:

1、我们在工作中会用到很多第三方软件(如,Velocitypoijxl等),我们是否也为用到这些第三方软件的同事屏蔽如何使用第三方软件(即会用RendererRendererManager即可)?这样其他人就不需要花时间去学习如何使用第三方软件了,既提高效率又利于维护。

 

2、如果有更好的模板技术出现,你要让它代替Velocity,工作量如何?怎么做?

 

3、当前我用Roller进行二次开发,有一个客户关系模块需要应用模板技术进行个性化的发送邮件、短信。我实现起来非常方便,分别实现加载邮件、短信模板的ResourceLoader就可以了,其他地方不需要改动。难道设计Roller的人预见我会有这个需求了吗?

 

 

 

猜你喜欢

转载自devroller2.iteye.com/blog/1567455