浏览 5294 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-07-09
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-07-10
这个工具应该叫TemplateAdapter合理些。
|
|
返回顶楼 | |
发表时间:2007-07-10
呵呵,名字来源Common-log ,感觉跟那东西性质差不多
|
|
返回顶楼 | |
发表时间:2007-07-10
和commons-logging的想法差不多,还不错,
即然是通用接口, 你应该满足用户最直接的调用期望, 不要出现那么多接口关系。 如,可以只提供一个接口: public interface TemplateEngine { public void mergeTemplate(String templateName, Map model, Writer output) throws MergeTemplateException; } 所有参数都应该是大家熟悉的数据封装类,以降低学习成本。 具体怎么和Context, Template打交道,可以在内部进行适配。 |
|
返回顶楼 | |
发表时间: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。 |
|
返回顶楼 | |
发表时间: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); |
|
返回顶楼 | |
发表时间:2007-07-10
引用 按理论TemplateEngineFactory应该放在net.jcreate.e3.templateEngine包下, 如果放在net.jcreate.e3.templateEngine包下,是不是也是循环依赖? 具体适配的产品依赖net.jcreate.e3.templateEngine包, TemplateEngineFactory也会依赖具体适配的产品. 如果要解决循环依赖的问题,是不是要新建一个包?那这个包又叫什么名字? facade?? |
|
返回顶楼 | |
发表时间:2007-07-11
public Context put(String key, Object value);
此函数所支持的“链式调用”风格是有争议的, 它违反“针对契约设计”中的“区分查询与命令” 因为put函数是有“副作用”的,它引起Context的内部状态改变, 所以它是一个“命令”式的函数,其返回值应该为void。 |
|
返回顶楼 | |
发表时间: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包。 |
|
返回顶楼 | |