关于Tapestry的一些问题

来源:http://forum.javaeye.com/viewtopic.php?t=6035&sid=42b6f6b88ee6a3cc2e2ccdea70a7fdf9

 

Tapestry也用了一段时间了,对于Tapestry基本上也是了解的很透了,不过也慢慢发现了一些问题,虽然Tapestry号称可重用的Server端控件,号称基于html模版,可是实际上还是有些问题。

首先,基于html模版其实不太有用,事实上一个动态页面写好以后,再用dreamweaver之类的工具打开编辑几乎不可能,所以这点优势可以说是很弱的。

其次,关于开发可重用控件的神话。

虽然控件开发出来以后用到的地方是很好用,可是他有以下缺点,足以打回可重用控件带来的好处

(1)开发控件的代价,开发控件要写.jwc,要写.js,要写.html, 要写.script, 要写java,要写library定义,太复杂了。

(2)理解/使用复杂控件的代码,以Tree为例,构造TreeModel是一件非常麻烦的事情。还要理解TreeSessionState

还有Table, 简单一个Table就要用上TableModel,TableSessionState,太复杂了.

而用jsp的话,做tree的话有TreeTag ,(http://www.jenkov.dk/projects/treetag/treetag.jsp)

做table的话有displaytag,都是一个非常简单非常好用的东西,

in fact i'm wondering taglib或者velocity也能做一些可重用的东西,做出来的东西来取代Tapestry的所谓可重用控件不会更难用。anyway,displaytag/treetag也算重用的)
(3) rewind / ListEditor listener / abstract getter and setter 不直观,难看。

(4)使用的代价,比如PopupLink,又要理解Tapestry对应控件,又要理解对应产生的javascript ,还不如一开始就直接写上javascript来的简单。

而且扩展困难,要扩展popupLink做跟多事情要麻烦死了。

(5) 扩展的代价,以service为例,扩展service 就要完全清楚tapestry底层的东西。以及跟其它系统(其他servlet构成的框架)交互的能力
例子可以参考Tapestry in Action里头的Ad Rotator例子,一个简单的
Ad Rotator就要新作service做很多工作,太可怕了,而传统的做法Ad Rotator是非常容易实现的。

(6)理解engine工作原理的代价

(7)调试的代价,如果涉及url encoding, engine, session ,abstract getter & setter等等,就很难作了

//封装太多,失去控制力了。

再次,page object 的逻辑duplicate 在java object 和 page specification 两个地方,太不直观了。往往研究页面关系要很费劲。

最后,单元测试的问题。Tapestry进行单元测试简直不可能,而用webwork是很容易的一件事。转去研究Webwork咯。
不过附带说的一下是,虽然Tapestry有满多缺点,但是他的Server端对于client 信息的Track技术还是相当不错的,用的一些url encoding, 、命名生成等等都非常棒,与传统做法大不一样,没想到servlet原来可以这样写法,对于我还是非常有启发的,这些知识可以用到其他地方去。

最近在作的一个xmlhttp command framework,就是受tapestry启发作的
(基本逻辑是client用xmlhttp发送命令,对应Servlet采用MVC model2.根据传来的的xmlhttp请求不同发送到不同action,目前dispatch action部分使用xwork)
xmlhttp请求类似于
<call namespace="..." actionName="...>
<param name="...">...</param>
</call>
而Servlet dispatch到对应的action执行。

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页