论坛首页 Java企业应用论坛

E3TemplateEngine一个通用的模板引擎

浏览 5294 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-07-09  
一个通用的模板引擎,支持Velocity,WebMacro,Freemarker和jxp. 希望对你有用,欢迎下载交流:)
   发表时间:2007-07-10  
这个工具应该叫TemplateAdapter合理些。
0 请登录后投票
   发表时间:2007-07-10  
呵呵,名字来源Common-log ,感觉跟那东西性质差不多
0 请登录后投票
   发表时间:2007-07-10  
和commons-logging的想法差不多,还不错,

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

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

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

}

所有参数都应该是大家熟悉的数据封装类,以降低学习成本。
具体怎么和Context, Template打交道,可以在内部进行适配。
0 请登录后投票
   发表时间: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。
0 请登录后投票
   发表时间: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);
0 请登录后投票
   发表时间:2007-07-10  
引用

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


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

如果要解决循环依赖的问题,是不是要新建一个包?那这个包又叫什么名字? facade??


0 请登录后投票
   发表时间:2007-07-11  
public Context put(String key, Object value);
此函数所支持的“链式调用”风格是有争议的,
它违反“针对契约设计”中的“区分查询与命令”
因为put函数是有“副作用”的,它引起Context的内部状态改变,
所以它是一个“命令”式的函数,其返回值应该为void。
0 请登录后投票
   发表时间: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包。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics