关于Tapestry的一些问题

本文主要探讨了Tapestry框架存在的问题,如基于HTML模板优势弱、开发和使用可重用控件复杂、逻辑不直观、单元测试困难等。同时指出其Server端对client信息的Track技术不错,带来启发,作者还受其启发开发了xmlhttp command framework。

来源: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执行。

Tapestry 是一个用于构建 Java Web 应用程序的开源框架,以其组件化和事件驱动的开发模型而著称。它旨在简化 Web 开发,同时提供强大的功能,使开发者能够构建可维护和可扩展的应用程序。 ### Tapestry 框架使用指南 Tapestry 的核心特性之一是其组件化架构,允许开发者通过组合可重用的 UI 组件来构建页面。每个组件都可以独立配置和测试,从而提高了代码的可维护性和复用性。此外,Tapestry 还支持模板驱动的开发方式,允许开发者使用 HTML 模板来定义页面结构,并通过 Java 类来处理业务逻辑和事件处理。 Tapestry 的另一个重要特性是其对依赖注入的支持,这使得管理应用程序中的对象依赖关系变得更加简单。通过使用 Tapestry 的 IoC 容器,开发者可以轻松地配置和管理应用程序中的各种服务和组件。 对于初学者来说,Tapestry 提供了丰富的文档和示例项目,帮助开发者快速入门。官方文档中包含了详细的安装指南、教程以及 API 文档,这些都是学习和使用 Tapestry 的宝贵资源。 ### Tapestry 开发问题 在使用 Tapestry 进行开发时,可能会遇到一些常见的问题。例如,组件的状态管理、事件处理以及页面导航等方面的问题。对于组件状态管理,Tapestry 提供了多种机制来保存和恢复组件的状态,包括客户端状态存储和服务器端状态存储。开发者可以根据具体需求选择合适的状态管理策略。 事件处理是 Tapestry 应用程序中的另一个关键部分。Tapestry 支持多种形式的事件处理,包括表单提交、链接点击等。开发者可以通过实现特定的接口或继承特定的类来处理这些事件,并执行相应的业务逻辑。 页面导航也是 Tapestry 应用程序开发中的一个重要方面。Tapestry 提供了灵活的页面导航机制,允许开发者通过编程方式或配置文件来定义页面之间的跳转规则。这种机制有助于创建复杂的多步骤流程,如向导式界面。 解决 Tapestry 开发中遇到的问题通常需要深入理解框架的工作原理和最佳实践。社区论坛、官方文档以及 Stack Overflow 等在线资源提供了大量的解决方案和建议,可以帮助开发者克服开发过程中遇到的挑战。 ```java // 示例:简单的 Tapestry 页面组件 import org.apache.tapestry5.annotations.Property; public class HelloWorld { @Property private String message = "Hello, Tapestry!"; } ``` 上述代码展示了如何定义一个简单的 Tapestry 页面组件,其中 `@Property` 注解用于将 `message` 变量暴露给页面模板,以便在页面上显示。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值