Google Web Toolkit 真的至关重要?

Google Web Toolkit 已经吸引了全世界无数web程序员的眼球,因为它承诺能够使AJAX Web开发变得简单。但是,它到底有多大的优势?而且,更为重要的是,我们有多需要它呢?

  这是一个否认的声音——首先,作为一个开发人员和框架架构师,我发现Google Web Toolkit (GWT)非常得迷人。它是那些非常有才能的人才能做出来的相当棒的软件。但是,问题是:在企业软件开发的领域中,这种吸引力的作用好像并不大。我的意思是,量身定制的软件中包含着成百上千个用例,而这些用例之间存在着极其复杂的交互业务和GUI逻辑。这种软件对于大多数程序员来说非常重要,因为工作中会牵涉到。而且这种软件也是我下面要探讨的Web应用程序开发的类型。

  首先,我们来总结一下GWT为(Java)Web 开发团体所带来的创新,有以下几点:

  •   一个使用Java.lang API实现的从Java到Javascript的编译器——虽然这个想法很棒,但是,这确实不能算是创新。因为,至少有一个以上的方案(J2S)已经提供了与此类似的特性,实际上,还提供了更先进的JavaScript生成特性。
  •   一个窗口组件库,能够在不使用HTML的情况下构建用户界面(UI)。这有些类似于Dojo中具备的功能,并且与J2S/RIA几乎相同。除此之外,还有一些服务器端的框架也能够提供相同的功能(如Echo2、wingS)
  •   一个在HTTP协议上的远程过程调用(RPC)的实现,它能够通过DWR在其他协议上实现。
  •   一个允许在Java中调试应用程序的容器。实际上,J2S确实不需要这个功能,因为它能够解释SWT/RCP代码,并且作为桌面应用程序自动运行。
  •   在项目开始时,脚本是受到了Ruby on Rails的启发(至少是类似的)。

  因此,Google主要是陷入了这个严重的问题:重新实现所有这些可利用的项目。当然,你可以争辩说,他们实现得更好、用起来更加方便、使代码更加文档化(这通常是一个项目成功与失败的关键)。但是,他们既然够像重新实现无数的其他项目,那为什么不重新实现Eclipse项目呢?而且,他们为什么不利用丰富客户端平台(RCP)或者丰富互联网应用程序(RIA)堆栈呢?

  关于这个问题,我的回答非常简单——Google希望解决他们自己的问题。为了理解GWT,我们首先需要理解Google创建它的动机。Google是不做商业软件的——他们做桌面软件,然后把它们放到web上(如GMail、Base、Spreadsheet、Calendar等)。这些软件所包含的用例相对较少,而用例通常都是很复杂的并且需要响应的。

  Google需要一种开发新的web应用程序的方式,这种方式应该是:

  •   1. 高度响应的
  •   2. 迅速开发的
  •   3. 迷人的

  其中,第二个目标的障碍是:如果要在web上达到高度响应,那么,你必须采用很多快速解决方案,而且更糟糕的是,你需要针对不同的浏览器采用不同的快速解决方案。正是这个问题使AJAX应用程序的开发成本远远高于普通应用程序的。

  针对这个问题,一个显著的解决方案是:把这些快速解决方案封装起来,放到简洁的界面背后。还有一个不很显著的解决方案是:使用大量的集成开发环境(IDE)和调试器,把快速解决方案封装到静态类型语言中,然后,尽量避免在应用程序中同时使用JavaScript。因此,GWT是解决快速开发AJAX类桌面应用程序的最佳方案,并且,GWT能够运行在主流的浏览器上而仅需要相当少的测试。

  但是,剩下的开发人员应该怎么办呢(尤其是那些编写大型商业应用程序的开发人员)?我的观点是:如果GWT不是100%纯粹基于JavaScript的话,那么它将是一种非常棒的视图技术。关于HTML和JavaScript的问题是:目前,至少有4种大型的不兼容的平台实现机制。我们正在讨论的就是:一种能够配套四种虚拟机的语言,同时它能够与事后制定的标准松散耦合——James Gosling的恶梦实现了。

  Web在商业应用程序中能够得到如此广泛的使用,其中一个主要原因就是:它是建立在Java承诺一次编程处处运行的基础上的(因为web平台比Java简单得多,而且对客户端环境的依赖较少)。而且web也能够给我们提供这些可能的特性:易于混搭、整合、重新设计等等。但是,JavaScript却使这个承诺变得毫无意义,因为在浏览器中存在着:

  •   对于脚本规模的限制
  •   对于脚本存储消耗的限制
  •   对于脚本运行时间的限制
  •   交叉域的访问限制
  •   非常多其他类型的限制,程序缺陷和不兼容性,这些都在折磨着web程序员

  所有的这些意味着你只能封装这么多——迟早一些“有毅力”的bug会死灰复燃,或者,使用标准工具包的话,你可能完成更多工作,而现在,你还需要采用JavaScript快速解决方案。实际上,我几乎能够确保:在所有规模足够大并且复杂的应用程序中,这种现象很快就会出现(我的意思是像内存溢出这样的bug,它们几乎不可能在平台中被调试出来)。确实,对于应用程序而言,HTML和HTTP从来都是没有意义的,它们的作用是用于在科学家之间分享信息的。不久,动态DOM、CSS、XML以及其他缩略语所代表的技术将运用到这些应用程序中来,虽然它们能够适合,但是,并不匹配——你可以用,但是无法走得很远。

  现在,结束对AJAX的讨论,我们切换到应用程序本身上来。一个典型的大型企业应用程序有着各种不同的用户界面需求,而不仅仅是一个典型的桌面界面。在商业应用程序的图形用户界面(GUI)中,有许多大而复杂的工作流,但是,只是一小部分这样的工作流是需要达到高度响应的(典型地,某些查询或者搜索)。而且,通过使用HTML并且添加一些独立于浏览器的JavaScript,这些需求是很容易满足的。实际上,如果我们对商业用户的需求进行调查的话,就能够了解到他们所需要的软件是:

  •   满足他们需要
  •   能够快速开发、价格合理
  •   不要与单独的开发商或者合作者绑定
  •   易于与其他软件整合

  通过以上分析,能够找到给商业世界带来这些的软件,并不是那些没有使用AJAX的软件。在web框架中,首先需要满足的是高度响应和整合——可能这就是为什么Struts如此流行的一个原因(运用Struts的主要过程是解决大量的遗留代码)。而且AJAX,如果有什么区别的话,那就是:加大整合难度、降低生产力。

  但是,这就意味着我将永远宣传简单的web应用程序么?当然,不是!我只是认为:基于IE来模拟桌面,这是商业客户端所无法承受的。如果已经做好了一个通用的丰富的GUI平台,那么,我将成为第一个进行试验的人。使Eclipse 丰富客户端平台(RCP)更加完美或者在Adobe Flash上编译Java应用程序(至少是稳定的平台),甚至可能将Avalon运行在Linux上。仅仅给我一些任务——让我以此来编写Java代码、并且带来的困扰比web应用程序少,我就能够无障碍地工作了。

  因此,在未来的几年内,Google Web Toolkit至关重要么?我肯定希望是不,因为这将意味着,我们必须在本质上具有破坏性的平台上来构建下一代的应用程序。而且,不论我是否有偏见,在21世纪的前十年内,我非常希望能够看到更好的平台发布。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
云应用开发 Google App Engine & Google Web Toolkit入门指南 侯炯 目录 第1章 应该了解下 1.1云基本知识 1.2Google App engine 1.3Google Web Toolkit 第2章 环境搭建 2.1安装JDK 2.2安装Eclipse 2.3安装SDK和Eclipse插件 第3章 Hello World! 3.1 创建项目 3.2 目录结构说明 3.3 修改文件 3.4 运行调试 第4章 华丽的控件 4.1 显示文本——Lable,HTML 4.2 方形选择框——CheckBox 4.3 圆形选择框——RadioButton 4.4 按钮——Button 4.5 自定义按钮——PushButton,ToggleButton 4.6 文件上传——FileUpload 4.7 时间选择器——DatePicker 4.8 列表控件——ListBox 4.9 联想输入框——Suggest Box 4.10 树结构——Tree 4.11 菜单条——MenuBar 4.12 栈板——StackPanel 4.13 基本输入框的——TextBox,PasswordTextBox,TextArea 4.14 弹出框框——RichTextArea 4.15 弹出对话框——DialogBox 4.16 修饰面板——DecoratorPanel 4.17 自然布局面板——FlowPanel 4.18 水平布面板——HorizontalPanel 4.19 垂直布局面板——VerticalPanel 4.20 绝对定位面板——AbsolutePanel 4.21 停靠面板——DockPanel 4.22 展开面板——DisclosurePanel 4.23 标签面板——TablePanel 4.24 水平拆分面板——HorizontalSplitPanel 4.25 垂直拆分面板——VerticalSplitPanel 4.26 网格——Grid 4.27 灵活表格——FlexTable 第5章 装饰控件 5.1 控件的主题 5.2 通过CSS装饰控件 5.3 通过代码修改控件 5.4 实例——火车时刻表 第6章 通信机制 6.1 RPC机制 6.1.1什么是RPC 6.1.2接口函数实现 6.1.3可序列化 6.1.4 注册服务 6.1.5 使用服务 6.1.6 实例——股票价格表RPC版本 6.2 Servlet机制 6.2.1 Servlet介绍 6.2.2 实例——Servlet版本HelloWorld 第7章 数据操作 7.1 概述 7.2 定义数据类 7.3 创建,获取和删除数据 7.4 查询和索引 7.5 事务 7.6 关系 7.7 实例——员工管理系统 第8章 国际化 8.1 普通文本国际化 8.2 参数文本国际化 8.3 实例 第9章 应用托管 9.1 申请Google App Engine账号 9.2 上传应用 9.3 应用维护指南 第10章 实战 10.1 入门例子——股票系统 10.1.1创建项目 10.1.2设计应用 10.1.3建立用户界面 10.1.4创建控件和面板 10.1.5事件处理 10.1.6实现客户端功能 10.1.7添加应用样式 10.1.8国际化 10.1.9服务器交互 10.1.10让App Engine托管应用 10.2 中级例子——个人网站 10.2.1样子与功能 10.2.2创建项目 10.2.3定义数据结构 10.2.4规定通讯协议 10.2.5实现数据交互和发送邮件功能 10.2.6注册提供服务 10.2.7总体界面设计 10.2.8首页界面实现 10.2.9日志界面实现 10.2.10关于我界面实现 10.2.11留言界面实现 10.2.12管理界面实现 10.2.13统筹界面和连接功能 10.2.14国际化 10.2.15欢迎界面和样式文件修改 10.2.16总结 10.3 高级例子——号码管家(GAE+GWT+Android) 10.3.1样子与功能 10.3.2创建项目 10.3.4规定通讯协议 10.3.5实现服务端的功能 10.3.6注册提供服务 10.3.7帮助界面设计 10.3.8服务条款界面设计 10.3.9编辑界面设计 10.3.10登陆界面设计 10.3.11列表界面设计 10.3.12统筹界面和连接功能 10.3.13国际化 10.3.14欢迎界面和样式文件修改 10.3.15手机端界面与功能实现 10.3.16总结

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值