锁定老帖子 主题:对fastm的一些看法
该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2005-06-06
buaawhl 写道 不用担心。我上面说的是,那些扩展的部分,context, boolean 等,全都在Interceptor里面。fastm本身的匹配规则不变。Dynamic 对应动态块,可能显示 0, 1, n 次,这个概念非常的清楚明了。 0, 1 可以对应分支的显示,0 -- n 可以表示循环。 而且从语法的角度来说,循环标签完全可以表示分支逻辑。 if(a == 0){ print 0; } 可以写成 for(; a==0; ){ print 0; break; } while(a == 0){ print 0; break; } 而fastm的定义方式,根本不用这么麻烦,就可以很简洁的就可以用统一的方式,表达这些语法树的概念。并且fastm本身就不是定义语法树的,而是定义资源树。 BEGIN END 是为了把一个Text切割成不同的DOM层次和部分。而并不是为了表达某个逻辑语法。类似于XML DOM, 而不是类似于velocity/freemarker script。 fastm的Template DOM是可以象 XML DOM那样使用的。你可以很方便的用现成的Template DOM nodes 任意组装新的Template DOM。 如果支持了逻辑标签,就丧失了这个功能。因为无法用一种简单直观有效的方法组织一棵语法树。 一个设计原则是: 能用一种方法做到的事情,就不必用另外一种方法。而且现有的方法已经非常统一简单直观。概念一定要统一直观。 另一个设计原则是: 能够放到代码里面的逻辑,尽量放到代码里面,便于组织管理调试。放到Template里面的东西,没有任何重用和管理的可能。 唉,我更注重体验,页面简单,java好写。你说的语法树,设计原则什么的,好难懂。 有时间把你改过的东西的用法贴上来看看吧。html就行。比如怎么子访问父,怎么判断boolean |
|
返回顶楼 | |
发表时间:2005-06-07
goldrain 写道 唉,我更注重体验,页面简单,java好写。你说的语法树,设计原则什么的,好难懂。 有时间把你改过的东西的用法贴上来看看吧。html就行。比如怎么子访问父,怎么判断boolean 1. Context parent.children parent.name <!-- BEGIN DYNAMIC: parent --> parent name:{name} <!-- BEGIN DYNAMIC: children --> parentName: {parent.name} , childName: {name} <!-- END DYNAMIC: children --> <!-- END DYNAMIC: parent --> Map context = new HashMap(); context.put("parent", parent); ContextInteceptor interceptor = new ContextInteceptor(); interceptor.setContext(context); template.toString(parent, interceptor); 2. boolean <!-- BEGIN DYNAMIC: children --> <!-- BEGIN DYNAMIC: ok --> It is OK. if you see this, means ok is true. <!-- END DYNAMIC: ok --> <!-- END DYNAMIC: children --> // ok is boolean type BooleanInteceptor interceptor = new BooleanInteceptor(); template.toString(parent, interceptor); 上面的代码是展开的。实际上应用的时候,可以作为一个公共函数。 如果用户需要 boolean 控制,Context等,那么可以自行选择或者编写对应的公用Interceptor。这些Interceptor可以组装成链,组合使用。 关于if, else, context, 不论fastm再怎么扩展标签,也永远赶不上Velocity, Freemarker的简洁。 Velocity, Freemarker 可以 foreach item in list, 可以set a = b..., 而且整个作用域范围内,变量都有效。在template 里面直接用script,总是比写java 直观简单。 这样做下去,最终的结果是把Velocity, Freemarker 用 <!-- -->的方式,实现一遍。完全可以修改 Velocity, Freemarker 的 jj 文件,用javacc编译一遍,达到这个目的。 fastm的追求目标,不是写法的简单,而是学习使用的简单,实现的简单,最重要的目标,是实现逻辑和页面的完全分离,达到所有逻辑的重用。这点如果用惯了script template,肯定不习惯,一定会想念 展示逻辑,显示逻辑的区别。 |
|
返回顶楼 | |
发表时间:2005-06-07
引用 <!-- BEGIN DYNAMIC: children --> <!-- BEGIN DYNAMIC: ok --> It is OK. if you see this, means ok is true. <!-- END DYNAMIC: ok --> <!-- END DYNAMIC: children --> 在ok这一块,你如果访问children的变量怎么写?children.name?还是直接name |
|
返回顶楼 | |
发表时间:2005-06-07
首先我们已有了共识:view层存在展示逻辑和页面逻辑两种逻辑。
在展示逻辑应放到那里这点上我和你还是有点分歧:我认为展示逻辑应在页面做,加几个标签,以方便的访问对象和属性,能控制数据打印格式,简单的分支判断等等 而展示逻辑也能重用,就是重用标签这类东西。 如果将两套逻辑都java作,要重用这两种逻辑,必然要考虑一个分离出两套逻辑的问题。为了view数据,却要写三个层:html,展示java,页面逻辑java. 这样做的java代码量是相当大的,你说这样可以重用展示逻辑.但重用的目的是什么?不就是减少代码量么? 再说性能,其实在每层都要对数据进行遍历,代码量不说,单运行时就3层遍历了3次.这是个问题. 我还是觉得html需要足够强大,但不用做的像velocity等那么强大,因为所有的数据都在后台计算好推过来了,至少计算,组装数据这一块可以省掉. 但展示和访问数据的能力,html还要加强.事实上你刚增加的功能就是在做这方面的努力 但是按你的思路,如果展示逻辑都到java中作,那现在我的需求比如增加对父的引用,增加日期格式化等,都是多余的.因为有展示逻辑层嘛.这些需求我们都可以在这层做掉. 我反而建议你不要实现我的这些需求,不要对dynamic增加这样那样的功能,维持dynamic的简单性 |
|
返回顶楼 | |
发表时间:2005-06-07
是的。那些扩展的逻辑功能都是在Java里面的Interceptor做的,而没有影响template engine本身。
3层遍历了3次? fastm遍历的次数,不会比velocity, freemarker多。 代码量方面,java code确实要比velocity, freemarker的html script要多。这是因为java是编译语言,不如script那么简洁。如果用ruby来做,那么就简单多了。 fastm最能发挥作用的场合,就是html里面的script特别多的时候,这时候抽出来放在java里面。 |
|
返回顶楼 | |
发表时间:2005-06-13
buaawhl 写道 是的。那些扩展的逻辑功能都是在Java里面的Interceptor做的,而没有影响template engine本身。
3层遍历了3次? fastm遍历的次数,不会比velocity, freemarker多。 代码量方面,java code确实要比velocity, freemarker的html script要多。这是因为java是编译语言,不如script那么简洁。如果用ruby来做,那么就简单多了。 fastm最能发挥作用的场合,就是html里面的script特别多的时候,这时候抽出来放在java里面。 我打算结合你的思路和自己的一些想法,也做个简单模版出来,就叫eastm吧. 把fastm改个字母. 改天贴出来讨论讨论. |
|
返回顶楼 | |
发表时间:2005-06-13
goldrain 写道 我打算结合你的思路和自己的一些想法,也做个简单模版出来,就叫eastm吧. 把fastm改个字母. 改天贴出来讨论讨论. 好啊。相互借鉴。庄表为做了一个fastm+,你也有eastm(easy template)。hope our work will be fast and easy. |
|
返回顶楼 | |
发表时间:2005-06-14
buaawhl 写道 好啊。相互借鉴。庄表为做了一个fastm+,你也有eastm(easy template)。hope our work will be fast and easy. 赫赫,fastm+!开源么? |
|
返回顶楼 | |
发表时间:2005-06-14
贴上来过的,后来被删除了,等我再传上来一次。
其实我以为,最好是合力做一个项目,三个人做三个项目,实在是太分散力量了。 |
|
返回顶楼 | |
发表时间:2005-06-14
fastm+ 代码
运行于resin下的 |
|
返回顶楼 | |