Spring和Hibernate已经成为我的常备武器,但是对于表现层,我却从来没有如此困惑过。
Struts已经被用滥了,相关的工具数不胜数。现在继续用它似乎没有什么挑战性。而且在现在看来,Struts也没有多少新概念了,记得当初刚开始用Struts的时候,倒是被它的Tiles、Controller、Validator诱惑了一下。
Tapestry似乎高高在上,项目组使用它仍然有极大的风险。当初喜欢它是因为它号称的组件思想,而且它可以将美工和程序员做到彻底的分离。Tapestry现在还在高速发展当中,许多旧的概念被抛弃,又添加了许多新的概念。当初一直耿耿于怀它的Form中的Component无论是在显示的时候,还是在提交的时候,都要进行计算一遍,搞得很是郁闷,现在新的版本已经有更加聪明的解决办法了。
Webwork口碑要好一点,我也更喜欢它多一点,可能我喜欢它的原因是因为它和OGNL的高度集成。甚至在使用struts的时候,我也喜欢把OGNL集成进去。
但是看来看去,一个页面特别是当有Portal概念的时候,页面就会变得异常复杂,状态变量很多。页面跳来转去,参数传来传去,而页面需要保留的参数或变量n多的时候,一会儿就能把你搞晕。
所以当AJAX渐渐被讨论得越来越多的时候,我似乎发现了一丝曙光。状态保持的问题,归根结底,是由于每次和服务器的交互,你都必须将页面状态进行保留,即时只是改变很少一点地方,也需要记住整个页面的状态。我认为AJAX的概念是将来web开发的一个主要方向。
特别是当HTML持续发展(或者被废弃)之后,W3C说XHTML是HTML的替代技术,XHTML带来了很多观念上的变革。HTML是专门用于表现的语言。XHTML致力于将页面的结构(structure)、表现(presentation)和行为(beharior)进行分离。有人说DIV+CSS=XHTML,当然这是一种戏言。但是我们可以从中看出DIV所代表的结构,CSS和script结合来控制表现行为,我总认为这样比bindows那笨重慢吞吞的javascript来得爽快。XHTML,既然是X(可扩展的),那就可以扩展其功能,比如添加一些标签或在现有的标签上添加一些属性,由X来对这些标签和属性进行维护(实质就是封装它的表现和行为),WebForm2.0 就是这样一种技术。
随着标准的持续发展,如果大多数流行厂商都对同一种标准支持得很好的时候,抛弃那种“点击一次需加载整个页面”的过程也为期不远了。一个结构良好、定义清晰、意义非常明了的文档,解释起来会容易得多。
也许你会感到困扰:AJAX和XHTML之间有什么关系?XHTML强调的是结构良好,因为它本质上就是一个XML文档,而且它的发展趋势是减少那些表示展现的标签(比如br标签在将来可能会去掉,因为它只表示一个换行,意义仅在于展现,对数据的表现意义不大),增加(推荐)那些表示结构的标签(比如你最好使用DIV而不要使用Table来进行布局控制)。结构良好就意味着方便控制,你可以控制某个节点的显示,在节点之间移动数据,当它和AJAX的概念结合起来之后,就实现了单一页面控制。随需在页面任何一个节点加载文档。页面就可以表现非常复杂的数据结构,而无需在不同的页面之间保存那些复杂的状态信息。
其实,好处是显而易见的。页面由不同的节点组成(Portal?),这些节点既是独立的,也是可以互相交互的,这就跟Tapestry号称的组件概念比较接近了,只不过一个是在服务器端,需要由框架来维护组件的状态;一个是在客户端,无需后台维护过多的状态信息。
所以,我更喜欢的是胖客户端方案,Bindows我认为是一个没有前途的框架,过于滥用javascript了,特别是它的速度,简直无法忍受。目前这方面的方案还不少,我没有时间去一一试用,相对来说,最近发现的一个框架Backbase,我觉得还不错。它有一套自定义的标签,使用起来还算方便,但是比较要命的是,它是一个商业性产品,虽然提供了一个免费的版本,但是显然你无法从这个免费版本里面得到更多的好处,因为它将它的javascript加密了,你打开看到的只是一堆没有意义的凌乱的function名称和参数名称。除非你有孙悟空的火眼金睛,或者长着n个脑袋,否则要理解它的代码,搬着梯子上天、狗嘴巴上贴对联、烟筒里安家、苍蝇围着鸡蛋转、骆驼进鸡窝——没门