11.1.4 DWR的适用范围
通过以上的介绍和试用可以看到DWR提供了许多东西,它允许迅速而简单地创建到服务器端Java对象的Ajax接口,而无须编写任何Servlet代码、对象序列化代码或客户端XMLHttpRequest代码。使用DWR部署到Web应用程序极为简单,而且DWR的安全特性可以与J2EE基于角色的验证系统集成。与手工编写Ajax应用程序相比,DWR通过Java映射机制、Java类对象与Javascript对象转换等方式,将服务器端Java类属性及其方法有选择地暴露给浏览器客户端,并应用一系列的扩展函数简化了Ajax应用程序开发,减少了开发量,提高开发效率。
但是,同任何RPC一样,对远程对象的每一个调用都要比本地函数调用来得昂贵,所以应该尽可能减少对远程对象的调用次数。与某些Java类、方法设计方式相比,DWR远程调用返回的数据应该尽量保持粗粒度,以防止多次频繁的调用远程对象。DWR在封装和隐藏Ajax机械性方面做的很好,但是这在一定程度上降低了Ajax的自由度。
实际上,使用DWR框架的Ajax应用将是一个高耦合的应用,因为DWR在客户端和服务器端代码之间形成了紧密的耦合。具体表现在:远程方法API的变化必须在DWR存根调用的Javascript上反映出来,必要时也必须修改dwr.xml部署描述文件,这点明显与当前广受推崇的MVC模式相悖。而这种考核会将客户端的调用考虑渗入到服务器端类方法等代码编写。典型的是,由于转换器的局限,某些Java方法和属性不能顺利转化为Javascript,所以常常有必要为这些方法特别添加额外的处理方法。所以,基于方便转换及其他的考虑,JavaBean的设计不再那么单纯和简单。同样,DWR的数据传输是采用异步方式,不要期望多个调用按照分派的顺序依次返回。
综上所述,如果读者希望能够将服务器端Java对象暴露给浏览器端Javascript,快速地创建Ajax应用程序,而且目标应用程序并不追求视图与控制器、模型层之间的低耦合,那么就可以考虑采用DWR来实现Ajax应用。由于篇幅的关系,本书并未涉及到DWR的全部特性。读者如果想深入学习DWR或者了解更多的内容,惟一的方式就是从其官方网站下载最新的文档和开发包,自己动手实践。






