【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

采访与书摘《Pro Web 2.0 Application Development with GWT》

  • 2008-12-23
  • 本文字数:3859 字

    阅读完需:约 13 分钟

InfoQ 非常荣幸地向大家推出《Pro Web 2.0 Application Development with GWT》一书的摘选,并因此有幸采访了本书作者——Jeff Dwyer。

1.GWT 在 Java 社区的地位越来越重要,市面上已经出版了很多关于 GWT 的书。相对于其它书来说,您的书的特点是什么?您觉得这本书最出色的部分是什么?

我觉得大部分编程类书籍的前半部分都在讲一些非常基本的东西,只要简单的了解一下 API 或者文档就能知道的东西,然后在书的后半部分列举几个例子展示一下如何实现某个特定的高级功能。这些书读起来很容易,但是真要坐下来开始开发程序的时候,你才会发现自己甚至还不知道该如何解决最基础的一些技术集成问题。我倾向于通过例子来学习,因而总是希望能够得到一些站点的源代码。学习 GWT 的过程中,如果把认识 GWT 所需的时间设为 X,那么将它与 Maven、 Spring Security & MVC、Hibernate & SiteMesh 集成需要的时间为 3X,而找到正确的构架模式则需要花上 5X 的时间。纯粹的 GWT 很容易,但集成却非常复杂。这就是本书着重覆盖的内容。本书解析了 1 万 5 千行代码的 ToCollege.net 源代码,我希望通过这种解析例子的方式能够帮助读者更快地领会如何去解决各种复杂的集成问题。 GWT 方面,我觉得难点之一是如何把完整的应用划分为可复用的组件。书中解析了拥有 1 万 5 千代码的 ToCollege.net 项目的源代码。我希望这本书能够帮助大家尽快掌握这项技术。至于 GWT,我觉得最棘手的难题之一是如何将您的应用划分为可重用的组件。关于这个问题,有各种各样的方式可以解决,也有很多互相针锋相对的建议。我觉得在自己动手实现之前,非常值得通过整个站点的上下文来了解别人是如何运用其中一种方式来解决这个问题的。

2.GWT 是用 Java 开发 Web2.0 应用的一种方式。在众多选择中,您为什么对它偏爱有加呢?

我第一个创业项目(MyHippocampus)是尝试开发一种通用存储工具,有点像《梦断代码》中的 Chandler,但我的项目中涉及更多的虚拟概念。首先,高度虚拟的是一个 Flash 程序,这部分我总觉得不太满意,我很讨厌实现 Flash 程序和 Java 服务器连接的那部分。之前我做过很多 Swing 方面的开发,所以对我来说 GWT 就非常自然,我尤其喜欢的是能够在客户和服务器端复用同一个对象。我不知道 GWT 是不是也会支持那些我放弃了但却正蒸蒸日上的类似 flash 类型的 UI。

3. GWT1.5 是最近发布的,而您的书也正是基于这个 1.5 版本之上。在您看来,这个新版本中加入的最有价值的特性是什么?

我觉得对于这个问题,答案是随着时间而变化的。最初,GWT1.5 只是为了迁移到 Java1.5 的使用上来。但现在我们所得到的则是一个令人惊喜的发布。编译器优化程度令人震惊。GWT 缔造了一个神话,让您的程序不需要修改任何代码都能在 GWT 编译器优化的帮助下运行得越来越快。您可以参考 Ray Cromwell 的一个关于 GWT Extreme 的出色的演讲—— http://timepedia.blogspot.com/2008/06/google-io-gwt- extreme-presentation.html,从中可以了解到它所带来的影响。 ImageBundles 不是一个全新的概念,但一旦您尝试使用这个特性,会完全为它所折服。30 个图像永远缓存在单一 HTTP 中而不给您添加任何负担?的确。1.5 中,由于注释支持的关系,这些缓存对象会被清理掉,但在孵化器中有一些优秀的代码能够帮助您把 ImageBundles 的概念延伸到其它类型的资源缓存上。

4. 您书中有一章特别解释了怎样针对搜索引擎来优化 GWT 站点。将 Ajax 应用变得可以被搜索这个需求很多时候都会被忽略或者无法正确实现。对于使用 GWT 创建 Web 应用的开发者来说,您觉得充分利用各种工具箱以及 Web2.0 功能的过程中,什么是最需要注意的?

显然,SEO 是一些应用必须具备的特性,而这项特性在富应用中又很难实现。我觉得,ToCollege.net 解决方案刚好是一种把 RIA 应用向搜索引擎敞开怀抱的轻量、不易入侵的方式。书中另外提到的一个主要概念是我常用的 command pattern 的使用。这是一个循环主题,我因此能够使用同一个结构来避免 XSRF 攻击 ; 实现与 Hibernate 的集成 ; 向客户端添加缓存,还能够很自然地让您的站点通过 Google Gears 在离线状态下同样正常工作。最后,本书还花了很多时间来讲安全,这也是我们非常注重的一个话题。

5. 有人曾对 GWT 及其自动生成代码的功能进行抨击,说如果通过一种语言(Java)来编写另一种语言 (JavaScript)的程序的话,会失去目标语言(JavaScript)的所有优点。您对这种说法是怎么看的?

这个问题问得很好。老实说,在我刚开始研究怎样创建富 Web2.0 应用的时候,我对 JavaScript 不是非常了解。一想到要编写大量针对浏览器的代码,要面对 IE6 的 bug,我就毛毛骨悚然。最近一段时间以来,我在 PatientsLikeMe 工作中用 JavaScript 编写了大量代码,不得不说的是 JavaScript 世界比我最初想象的要好很多。时间加上开放的头脑,您完全可以写出干净利落的 JavaScript 代码,只需要花点时间好好研究一下最佳用法。JavaScript 这门语言很有意思,但如果您只是试图通过写 JavaScript 来生成 Java,那您肯定会对它深恶痛绝。对于优秀的开发人员来说,JavaScript 可以起到非常好的作用,但仍然局限在一定程度以内。 GWT 诞生的原因是,Google 发现 JavaScript 不适合大型项目。他们有大量最优秀的开发人员,遵循最佳用法的原则进行开发,但项目很大的时候,他们发现外部工具的支持开始比干净的 JavaScript 代码更胜一筹。我觉得在考虑使用 GWT 的时候,牢记这点是非常有用的。GWT 不是为初级开发人员创建的 EZ-AJAX,也不是为那些不想学 JavaScript 的人而设计的,而是 Google 的天才开发人员在为开发更大型的富网络应用而抓狂的时候所激发的点子。

6. 很多使用 GWT 的开发人员都极为赞赏的一点是他们因此不需要再亲自验证应用在各种浏览器下的运行情况。您觉得这是 GWT 强有力的优势吗?

不见得。正如我之前提到的,在我开始运用 GWT 的时候,这是个非常引人注目的卖点,但是说实话,我觉得有点过高估计了这个问题。从这个角度来说,GWT 的确很好用,但一些 JavaScript 解决方案也不见得很烂。您可以找到很多相关的例子或者开发框架。当然,有时候您需要考虑把元素放在 popup 后面,这样 form 元素就不会混淆其中,当然您应该考虑一些关于漏洞的问题,但通常来说,跨浏览器开发中真正的难题是 CSS,而不是 JavaScript。 Prototype/JQuery/etc 是不错的类库。所以从这点来看,GWT 非常不错,但我不希望大家用 GWT 来跑一些非常基础、只需要几行 Script.aculo.us 的东西。如果您只是构架一个简单的网站,那使用 GWT 就可能有点小题大作了。

7. 在 GWT 生成 JavaScript 文件之后,您还常常需要在各种浏览器下 debug 您的应用程序吗? 如果要那样 debug 的话,您觉得容易找到并修正 bug 吗?

从 1.3 起,我就没必要在浏览器下 debug 那些生成的 JavaScript 了,即使有时候有 bug,95%都是我的错。GWT 生成的代码都很对。实际上,还不止这些。GWT 还能省去大量内存问题,甚至还能修补 JavaScript 开发人员的疏忽。GWT 能够在您毫无之觉的情况下修补一些漏洞。 CSS 完全是另外一码事。关于 CSS,我最后要做的都只是编译而已。我的基本工作流是,先在 hosted 模式下实现功能项,然后就只是等待几秒钟的代码刷新时间。然后编译,再在 Firefox 下查看,选用 Firefox 是因为因此可以借用 Firebug 的力量来查看 CSS 是否正确。再然后,把 CSS 迁回到项目中来,查看要让该 CSS 在 IE 下正常显示还需要做些什么。但是,很长一段时间以来,我都没有必要再把生成的 JavaScript 以 pretty 模式输出。

8. 很多人认为,像 GWT 这样自动生成代码或者精细的 JavaScript 开发框架的出现意味着传统的“Web 平台”已经发展到了它的极点,应该由一些更先进的事物来替代了。您对这个观点怎么看?

这正是问题所在!我认同这个观点。这个观点很有意思,但也带着些讥讽。我觉得自己对 REST 不断增长中的热情实际上也使得我越来越感到 web 平台实际上在拖大家的后腿。REST 用起来也很好,但我常常觉得它应该在那些服务器只负责 REST 服务,而客户端负责与 UI 相关的一切事务的世界里会运行得更好。客户端越“富有”,两端就越难覆写所需功能项,把应用逻辑布置在服务器端就愈发显的奇怪。InfoQ 关于 SOFEA 和 ThinServerArchitecture 的文章在这点上着实影响了我的看法。我觉得 GWT 在下面这个情景中运用会非常恰当。比方说,您有一个可以在客户和服务器两端运行的代码库,然后您可以把 MVC 栈从服务器端转移到客户端,这对于应用的可伸缩性以及用户体验都非常有帮助。但问题的本质是,我们是否需要引进新事物。我觉得还没有这个必要。我们有可能正在接近将应用逻辑布置在服务器端的末期,不仅仅将浏览器作为用户代理。浏览器的应用无处不在,而 GWT 帮助您解决很多相关问题,除此之外,您还能从 Google Gears 中受益。最后,如果您还想要实现更多,那么 Java WebStart 是不错的选择。

9. 作为 GWT 工具箱的用户,您期望它将来的发布中引入一些怎样的新特性?

你想知道我的“白日梦”吗?我很希望 GWT 能够在动态语言中使用。当然我也知道,这也可能意味着失去极好的 refactoring 支持以及 GWT 为比较大的团队提供的其它一些优点。但开发 GUI 的人们强烈期盼对动态语言的支持。如果能够在 GWT 项目的一些较为动态的元素上混合使用 Groovy,那多有意思阿!

阅读英文原文 Interview and Book Excerpt: Pro Web 2.0 Application Development with GWT


志愿参与 InfoQ 中文站内容建设,请邮件至 editors@cn.infoq.com 。也欢迎大家到 InfoQ 中文站用户讨论组参与我们的线上讨论。

2008-12-23 23:301271
用户头像

发布了 71 篇内容, 共 19.3 次阅读, 收获喜欢 3 次。

关注

评论

发布
暂无评论
发现更多内容

阿里员工感慨:码农们过去暴富有多轻松,现在赚钱就有多辛苦!

Java 程序员 后端

助力数字孪生,TDengine在叁零肆零仿真平台中的实践

TDengine

数据库 tdengine 后端

这几个动态规划的问题,面试官就爱问

华为云开发者联盟

数组 动态规划 序列 子数组 公共子串

阿里蚂蚁金服超全126道面试题,都会的话,你也能去面阿里了

Java 程序员 后端

阿里技术总监纯手打的内部手册《MySQL笔记》真是太硬核了

Java 程序员 后端

阿里亿级长连网关的云原生演进之路

Java 程序员 后端

阿里大师推荐的这份Java开发必读书单,让我成功在寒冬中站稳脚步

Java 程序员 后端

阿里巴巴蚂蚁金服Java面试经历包含答案解析

Java 程序员 后端

阿里技术官亲手总结Part 10个知识点!主动分享!收藏必备!

Java 程序员 后端

Flink CDC 实时数据同步详细解析

五分钟学大数据

flink 11月日更

阿里面试官整理出面试必问:java面试核心知识原理+框架笔记

Java 程序员 后端

阿里大牛看了也要膜拜的大话代码架构(项目实战版)终于出来了

Java 程序员 后端

35w奖金池,腾讯云TDSQL精英挑战赛正式开赛!

科技热闻

阿里老人吐槽:新人水平差不服管不加班!汇报经理让他无法转正(1)

Java 程序员 后端

阿里老人吐槽:新人水平差不服管不加班!汇报经理让他无法转正

Java 程序员 后端

道与术丨华为云数据库战略启示录

华为云开发者联盟

数据库 opengauss 华为云 GaussDB 战略

阿里内部疯传的分布式架构手册,轻松吊打小日子过的不错的面试官

Java 程序员 后端

阿里又一个“逆天”容器框架!这本Kubernetes进阶手册简直太全了

Java 程序员 后端

阿里巴巴内部涨薪必备的“王者级Dubbo实战笔记”,不啃透不下班

Java 程序员 后端

阿里面试官:HashMap 为什么是线程不安全的?

Java 程序员 后端

阿里面试确实严格,面了整整5轮,还好我技高一筹!

Java 程序员 后端

阿里五面(4轮技术+HR)成功逆袭,面经分享

Java 程序员 后端

阿里架构师剖析程序运行原理,程序是如何运行又是如何崩溃的?

Java 程序员 后端

阿里程序员:入职才两个月,我决定离职

Java 程序员 后端

阿里面试官:就说最后一遍,有关Spring这13点我们必问!

Java 程序员 后端

一周信创舆情观察(11.1~11.7)

统小信uos

阿里内部绝密Java面试笔记(珠峰版),冒着被开的风险免费分享

Java 程序员 后端

阿里技术3面+HR面,奋战两个月,终斩获offer定级阿里P6+

Java 程序员 后端

震惊!2022 年秋招 Java 后端开发岗竟然一片红海!算法岗都不香了吗?

Java 程序员 后端

阿里腾讯微软拥抱低代码,程序员们要“失业”?

Java 程序员 后端

阿里面试官:你好,谈谈对Synchronized的理解?(一

Java 程序员 后端

采访与书摘《Pro Web 2.0 Application Development with GWT》_Java_Scott Delap_InfoQ精选文章