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包。
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。
此函数所支持的“链式调用”风格是有争议的,
它违反“针对契约设计”中的“区分查询与命令”
因为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
我定义的模板引擎接口是
子所有定义了一个Template对象,而不是String templateName,是因为当是文件模板时,需要client设置模板文件的编码方式.
使用Context而不是用Map,因context的put返回的Context,那样我向里面设置模板变量比较方便,可以这样new DefaultContext().put("a","avalue)
.put("b","bvalue);
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。
发现:
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的想法差不多,还不错,
即然是通用接口,
你应该满足用户最直接的调用期望,
不要出现那么多接口关系。
如,可以只提供一个接口:
所有参数都应该是大家熟悉的数据封装类,以降低学习成本。
具体怎么和Context, Template打交道,可以在内部进行适配。
即然是通用接口,
你应该满足用户最直接的调用期望,
不要出现那么多接口关系。
如,可以只提供一个接口:
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合理些。
发表评论
提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则
- 浏览: 12787 次

- 详细资料
搜索本博客
我的相册
FCG体系结构3
共 10 张
共 10 张
最新评论
-
e3.tree 1.5 发布,很好, ...
确实不错,今天刚适了一下,还可以,主要是页面比较简捷了!
-- by Run -
e3.tree 1.5 发布,很好, ...
黄老大这个集成好呀,最近项目中要用到动态树,e3封装的ext tree很适合呀, ...
-- by flyfan -
e3.tree 1.5 发布,很好, ...
节点在1W以上的用MzTreeView2.0是很好的方案。 加载很快的
-- by cqx2004 -
e3.tree 1.5 发布,很好, ...
用EXT TREE 500个节点 轻轻松松
-- by java_2006 -
e3.tree 1.5 发布,很好, ...
pacer123 写道当使用的是单选按钮的方式时,如何使一级节点前也有选择,方便 ...
-- by huangyh






评论排行榜