论坛首页 Java企业应用论坛

对fastm的一些看法

浏览 17327 次
该帖已经被评为精华帖
作者 正文
   发表时间: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
0 请登录后投票
   发表时间: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,肯定不习惯,一定会想念 展示逻辑,显示逻辑的区别。
0 请登录后投票
   发表时间: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
0 请登录后投票
   发表时间:2005-06-07  
首先我们已有了共识:view层存在展示逻辑和页面逻辑两种逻辑。
    在展示逻辑应放到那里这点上我和你还是有点分歧:我认为展示逻辑应在页面做,加几个标签,以方便的访问对象和属性,能控制数据打印格式,简单的分支判断等等
    而展示逻辑也能重用,就是重用标签这类东西。
    如果将两套逻辑都java作,要重用这两种逻辑,必然要考虑一个分离出两套逻辑的问题。为了view数据,却要写三个层:html,展示java,页面逻辑java.
    这样做的java代码量是相当大的,你说这样可以重用展示逻辑.但重用的目的是什么?不就是减少代码量么?
    再说性能,其实在每层都要对数据进行遍历,代码量不说,单运行时就3层遍历了3次.这是个问题.
    我还是觉得html需要足够强大,但不用做的像velocity等那么强大,因为所有的数据都在后台计算好推过来了,至少计算,组装数据这一块可以省掉.
    但展示和访问数据的能力,html还要加强.事实上你刚增加的功能就是在做这方面的努力
    但是按你的思路,如果展示逻辑都到java中作,那现在我的需求比如增加对父的引用,增加日期格式化等,都是多余的.因为有展示逻辑层嘛.这些需求我们都可以在这层做掉.
    我反而建议你不要实现我的这些需求,不要对dynamic增加这样那样的功能,维持dynamic的简单性
0 请登录后投票
   发表时间: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里面。
0 请登录后投票
   发表时间: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改个字母.
改天贴出来讨论讨论.
0 请登录后投票
   发表时间:2005-06-13  
goldrain 写道

我打算结合你的思路和自己的一些想法,也做个简单模版出来,就叫eastm吧.
把fastm改个字母.
改天贴出来讨论讨论.


好啊。相互借鉴。庄表为做了一个fastm+,你也有eastm(easy template)。hope our work will be fast and easy.
0 请登录后投票
   发表时间:2005-06-14  
buaawhl 写道

好啊。相互借鉴。庄表为做了一个fastm+,你也有eastm(easy template)。hope our work will be fast and easy.


赫赫,fastm+!开源么?
0 请登录后投票
   发表时间:2005-06-14  
贴上来过的,后来被删除了,等我再传上来一次。

其实我以为,最好是合力做一个项目,三个人做三个项目,实在是太分散力量了。
0 请登录后投票
   发表时间:2005-06-14  
fastm+ 代码
运行于resin下的
0 请登录后投票
论坛首页 Java企业应用版

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