2007-07-09

E3TemplateEngine一个通用的模板引擎

关键字: 模板引擎 E3
一个通用的模板引擎,支持Velocity,WebMacro,Freemarker和jxp. 希望对你有用,欢迎下载交流:)
评论
javatar 2007-07-11
TemplateEngineFactory不用新开一个包,可以想办法使其不依赖具体适配的产品,也只有这样,当第三方实现新的适配产品时,也可以注册到此工厂,而不需要修改TemplateEngineFactory类,也符合最基本的开闭原则。

TemplateEngineFactory应放入net.jcreate.e3.templateEngine而不是net.jcreate.e3.templateEngine.support的原因是,net.jcreate.e3.templateEngine包是API(Application Programming Interface)包,而net.jcreate.e3.templateEngine.support是SPI(Service Provider Interface)包,TemplateEngineFactory主要目的是给直接用户使用的,所以其应放入API包,如果只单是纯给第三方扩展用的,则应放入SPI包。
javatar 2007-07-11
public Context put(String key, Object value);
此函数所支持的“链式调用”风格是有争议的,
它违反“针对契约设计”中的“区分查询与命令”
因为put函数是有“副作用”的,它引起Context的内部状态改变,
所以它是一个“命令”式的函数,其返回值应该为void。
huangyh 2007-07-10
引用

按理论TemplateEngineFactory应该放在net.jcreate.e3.templateEngine包下,


如果放在net.jcreate.e3.templateEngine包下,是不是也是循环依赖? 具体适配的产品依赖net.jcreate.e3.templateEngine包,
TemplateEngineFactory也会依赖具体适配的产品.

如果要解决循环依赖的问题,是不是要新建一个包?那这个包又叫什么名字? facade??
huangyh 2007-07-10
我定义的模板引擎接口是
public interface TemplateEngine {
	public void mergeTemplate(Template pTemplate,
			                  Context pContext,
			                  Writer pWriter) throws MergeTemplateException;
}

子所有定义了一个Template对象,而不是String templateName,是因为当是文件模板时,需要client设置模板文件的编码方式.
使用Context而不是用Map,因context的put返回的Context,那样我向里面设置模板变量比较方便,可以这样new DefaultContext().put("a","avalue)
.put("b","bvalue);
javatar 2007-07-10
刚才有空分析了一下你项目的CC,Ce,Ca等值,
发现:
net.jcreate.e3.templateEngine.support.TemplateEngineFactory
的分包有问题。
它引起:
net.jcreate.e3.templateEngine.freemarker
net.jcreate.e3.templateEngine.jxp
...
这些包与:
net.jcreate.e3.templateEngine.support
形成循环依赖。

按理论TemplateEngineFactory应该放在net.jcreate.e3.templateEngine包下,

且TemplateEngineFactory不应该依赖于具体适配的产品,
可以用一个配置来注册,或者IoC。
javatar 2007-07-10
和commons-logging的想法差不多,还不错,

即然是通用接口,
你应该满足用户最直接的调用期望,
不要出现那么多接口关系。

如,可以只提供一个接口:
public interface TemplateEngine {

    public void mergeTemplate(String templateName, Map model, Writer output) throws MergeTemplateException;

}

所有参数都应该是大家熟悉的数据封装类,以降低学习成本。
具体怎么和Context, Template打交道,可以在内部进行适配。
huangyh 2007-07-10
呵呵,名字来源Common-log ,感觉跟那东西性质差不多
javatar 2007-07-10
这个工具应该叫TemplateAdapter合理些。
发表评论

提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则

您还没有登录,请登录后发表评论

huangyh
搜索本博客
我的相册
Ff66d010-8d48-4224-b202-66e72ff8ac74-thumb
FCG体系结构3
共 10 张
最近加入圈子
存档
最新评论