Java web framework 之选择

homer

相比 PHP, Ruby, Python 等语言,用 Java 来做 web 开发面临着太多的选择。不过也许正因为 Java 的选择更多,所以才有更多的人选择 Java?这一点不能确定。来这里看看,光是持久层的 ORM 工具就有这么一大坨。当然这里面还是 Hibernate 为王,这个选择比较容易做。

然而到了表现层,虽然框架不是那么多,但是选择起来可不容易。每个框架需要评估的方面至少包括性能、学习/开发速度、可维护性、用户群体 (community) 等。

Matt Raible 曾经对 Java web framework 们做了比较 (PDF 下载,建议右键另存为),我觉得这个 presentation 可以从39页开始看。第43、43页的建议和 tips 非常有价值:

  • Don’t believe blogs and articles – 也就是说,该 presentation 39页之前的内容要谨慎对待 🙂
  • Try it yourself
  • Believe developers, not evangelists
  • Believe developers that are experienced with the framework and have used it in production
  • Beware of corporate interests – they can twist marketing
  • Books are a good sign

如何选择呢?”Pick 2-3 frameworks for your type of application… and prototype! If prototyping is painful, switch.” 嗯,不要仅仅看各种派别的人整天在那争论孰优孰劣,虽然他们的争论很有价值,但是每个框架都有自己的优点和缺点,甚至有些优缺点是主观的。你选择的框架应该在你的项目环境(项目本身以及团队情况)中扬长避短,将优势发挥到最大。”You should try a framework before dissing it!”

其实我是在考虑 struts 1.x 与 Tapestry 5 的取舍,所以才在网上到处逛。TheServerSide 上就有不少争论,那阵势跟 vim 和 Emacs,Windows 和 Linux 阵营之间的争吵差不多,只是多数人还没有上升到信仰的高度。直到看了这个 presentation 之后我才开始考虑,对,做个简单的 Tapestry 程序,不就一目了然了吗?一直犹豫不决是因为我对 Tapestry 太不了解了。

在这个过程中,我很快知道了 Tapestry 如何加入到一个 web 项目中,它是怎么接管服务器收到的请求,请求处理的流程,表单验证,以及最后返回给客户端的 HTML 代码。REST like 的 URL,非常简单的配置文件(相比 struts),灵活的 component 都是我喜欢的特性;然而在我看来它对 JavaScript 的集成有点过分,绑定了 Prototype/script.aculo.us。

回到 Matt Raible 的 presentation,他提出的比较标准中有一条是 Ajax Support (18页),Is Ajax support built-in and easy to use? 说实话,我非常不喜欢 JavaScript/Ajax 被集成到一个服务器端的框架中。(+) 本来我是想在这扯一大段的,不过想了想可以另外扯出一篇文章来凑数,哈哈。

很可能我将选择 Tapestry 来开始新的项目,但我 90% 的可能不会使用其 Ajax component,另外 10% 的可能是它的实现真的很棒。

struts 1 太老了,它之所以仍然流行是因为其庞大的用户群体。有些比较让人烦的问题,比如除了配置文件之外,其请求处理流程使得使用 oscache 这样的页面缓存变得不那么顺手。但是我非常喜欢它丝毫不入侵客户端这一点,它做了一个框架应该做的事情,不多也不少。webwork 过继给 struts 的 struts 2 我个人非常不喜欢,配置文件仍然是一大坨,非常之杂乱,action class 也很乱,也想将魔爪伸向客户端的 JavaScript(ajax taglib) 与 CSS(theme)——我可能存在误解,因为我仅有的 struts 2 经验是在别人的一个项目中帮忙,可能是团队成员的问题。

不出意外的话 Tapestry 就是我的选择了,我将在这里分享自己的使用经验与心得。

P.S. 我非常希望交几个 Java web 方面(甚至 PHP/Python/Ruby)的朋友,没事的时候请教一些问题,有意请联系我 Gmail/Gtalk: zhouqb (89.9% uptime guarantee during work hours)

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload CAPTCHA.