gwt格式_GWT –利弊

gwt格式

我喜欢JavaScript。 随着jQuery和Mootools的出现,我对JavaScript的热爱倍增 。 如果有选择,我将对开发的任何Web应用程序使用上述任一框架。 但是进入服务行业后,我不得不一次次屈服于客户的压力,并在他们选择技术的过程中努力-是否正确( 向吹笛者付款的人叫the。不是吗? )。 一位这样的客户使我了解了GWT的世界。

在发布GWT的那几年,我给了他们一些镜头。 那时我不那么喜欢它,所以我将其关闭,再也没有回来。 但是,在过去六个月的时间里,我对该项目的印象稍有不同。 我仍然不能说GWT是切成薄片的面包之后的下一件大事,但是至少它没有我想象的那么糟糕。 我刚刚记录了我在项目过程中的好与坏的观察结果,并认为一些开发人员可能会在评估GWT时发现它有用。

优点:

  1. 如果您是Java的资深人士,并且具有Swing或AWT的经验,那么选择GWT应该很容易。 在这种背景下,学习曲线最少。
  2. 即使您没有Java GUI开发方面的经验,多年开发GWT应用程序的经验也会对您有所帮助
  3. 您可以创建高响应性的Web应用程序,以减轻客户端的负担,并减少与服务器端的闲聊
  4. 尽管有很多JavaScript库供您随意使用,而且其中的大多数都值得一试,但许多传统开发人员并不了解它的真正功能。 请记住,像JavaScript这样的强大语言是一把双刃剑。 如果您不知道如何使用它,即使您将无法清理自己创建的混乱
  5. 您可以迭代地从典型的Web应用程序迁移到GWT应用程序。 这不是一个全有或全无的主张。 您可以使用一个名为JSNI的巧妙技巧与已经拥有JavaScript函数进行交互。 但是总是最好早日将它们移至GWT
  6. IDE对GWT的支持再好不过了。 Java IDE在过去十年中已经成熟,成为世界上最好的IDE之一,GWT可以直接利用它
  7. 您可以杀死集成的调试美女。 成熟的Java IDE提供的出色的调试支持是一项功能,该功能可能会影响任何人赞成GWT的决定。
  8. 可以直接很好地利用内置的IDE支持重构Java代码,以始终保持简单的设计。 用JavaScript进行此操作并非出于内心的虚弱
  9. 至少可以说,IDE语法突出显示,错误检查,代码完成快捷方式等不胜枚举。
  10. Google正在积极开发GWT。 我们知道该项目不会很快消失。 到目前为止,他们对项目的承诺已充分说明了该行业的未来。
  11. 该项目背后的社区也是一个巨大的优势。 每天在Stack Overflow,讨论论坛,Wiki和个人博客中进行讨论。 使用正确的关键字进行简单搜索可以为您指明正确的方向
  12. GWT是一个经过深思熟虑的API; 不是匆忙整理的东西。 这可以帮助您作为开发人员快速理解抽象并使其真正直观地使用
  13. 您可以使用GWT的内置协议在客户端和服务器之间传输数据,而无需任何其他有关如何打包和发送数据的知识。 如果您希望获得更多控制,则可以始终使用XML,JSON或您选择的其他专有格式。 即使在这种情况下,使用JSON时,也不必使用非直观的Java JSON库。 您可以使用JSNI通过简单的javascript“评估” JSON。 酷吧!
  14. 您具有能够使用标准Java静态代码分析器(例如FindBugs,CheckStyle,Detangler,PMD等)来监视代码和设计质量的优点。 当您在拥有不同经验的大团队中工作时,这一点非常重要。
  15. 您可以使用JUnit或Test NG进行单元测试,可以使用JMock或另一个模拟库来模拟依赖项。 如果您已经练习过,那么遵循TDD是很简单的。 尽管有基于JavaScript的单元测试框架,例如jsunit和qunit,但还是告诉我有多少人已经知道或渴望使用它。
  16. GWT编译器生成跨浏览器JavaScript代码。 今天,任何说这话的营销人员都可能被击败。 现在,它已成为一种基本必需品,而不是奢侈品
  17. GWT编译器可以一口气为您优化生成的代码,删除无效的代码,甚至为您混淆JavaScript
  18. 尽管编译过程需要花费很多时间,但是您在开发过程中不必经历所有过程。 有一种特殊的托管模式,该模式使用浏览器插件并直接使用Java字节码生成输出。 这是您能够使用Java调试器调试客户端代码的主要原因之一。
  19. 可以通过许多项目(例如Smart GWT,Ext GWT等)获得丰富的第三方控件。它们设计精良,易于使用且具有主题性。 因此,如果您有一个要求,即现有控件不能仅仅削减它,那么您应该考虑这些项目之一。 这些组件之一很有可能实现。 即使无法解决问题,您也可以随时推出自己的解决方案。
  20. GWT强调有状态客户端和无状态服务器的概念。 这将导致许多用户必须共存的服务器上的负载极少,而只有一个用户在工作的客户端上的负载却很高
  21. I18N和L10N在GWT中非常简单。 实际上,基于语言环境的编译由GWT编译器本身负责。 关于常规的仅客户端框架不能说相同的话
  22. GWT内置了浏览器后退按钮支持,即使在使用AJAX时也是如此。 如果您是AJAX开发人员,那么您几乎可以放心。 这是无价的。

缺点:

  1. GWT是一个快速发展的项目。 因此,周围有很多版本。 不赞成使用许多功能,接口和事件,而当您要做其他工作时,跟上它们的步伐并不会太有趣
  2. 一开始有很多关于GWT的书。 这些天没那么多。 例如,我没有找到关于GWT 2.0版的很多书。 这只剩下Google的文档。 我同意所有文档都是不错的,但是没有什么能比写得好的书更好
  3. 使用GWT并不有趣。 毕竟是Java,而Java不是一种有趣的语言。 如果您添加了所有布局和自定义控件都应使用Java创建的事实,则可以轻松地使成熟的程序员哭泣。 随着UI绑定程序从2.0版开始的引入,该问题已得到解决,但是现在您需要学习一种新的语法。
  4. Java到JavaScript的编译速度相当慢,如果您选择GWT,这是一个很大的缺点。
  5. 我个人更喜欢在HTML中定义结构并使用CSS对其进行样式设置。 HTML中使用的概念简洁明了,而我对此有多年的经验。 但是在GWT中,我被迫使用专有方法来执行相同的操作。 再加上GWT不能解决我不兼容的样式和对齐问题,这使问题更加复杂。 因此,我很想在GWT中编写布局代码。 但是从2.0版开始,有了UI Binder和HTMLLayout,我感觉自己又回到了自己的领域
  6. 进入GWT需要花费一些认真的承诺,在此之后,更改客户端技术可能需要完全重写您的应用程序,因为这与其他客户端框架完全不同
  7. 没有使用GWT进行应用程序开发的明确方法。 我们应该为每个应用程序仅使用一个模块,还是为每个页面或两者之间的某个位置使用一个模块。 这些设计模式直到现在才在慢慢发展。 因此,通常人们倾向于在一个模块中进行全部开发,直到模块大小超出可接受范围,然后将其重构为多个模块。 但是,如果为时已晚,那么重构也不会那么容易
  8. 尽管典型的桌面GUI应用程序只能做到这一点,但是听起来和代码的混合听起来并不正确。 但是如今,即使像Flex和Silverlight这样的桌面应用程序框架也采用了基于XML的声明性方法来将表示与逻辑分离。 我认为GWT 1.x版本具有此缺点。 从2.0版开始引入UI Binder,我认为可以消除这种缺点,尽管它是另一种痛苦的XML语言,
  9. 与其他客户端库(例如jQuery)相比,您通常需要花三倍到五倍的代码才能完成简单的工作
  10. 您还应该记住,使用GWT时,从HTML的抽象并不完整。 您仍然需要了解您的应用程序正在生成的DOM结构以对其进行样式设置,而GWT会使在代码中更难看到此结构。
  11. GWT仅对Java开发人员是一个优势。 具有.NET或PHP背景的开发人员在这里一无所获
  12. 如果您已经体验过JavaScript的强大功能,并且知道如何正确利用JavaScript来发挥自己的优势,那么您将对Java这样的非表达性语言感到language贬不一

我相信你们中的许多人会有不同意见。 差异很好。 因此,如果您有其他想法,请随时发表评论。 我们将讨论...

参考: GWT –我们的JCG合作伙伴 Ganeshji Marwaha在Ganesh博客上的优缺点。


翻译自: https://www.javacodegeeks.com/2012/01/gwt-pros-and-cons.html

gwt格式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/356542.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sap获取系统时间_获取系统当前时间

NSString *appKey(){// // 获取系统当前时间// NSDate * date [NSDate date];// NSTimeInterval sec [date timeIntervalSinceNow];// NSDate * currentDate [[NSDate alloc] initWithTimeIntervalSinceNow:sec];//// //设置时间输出格式:// NSDateFormatter * d…

Git 初始化版本库

创建带工作区的版本库 在开始一个新项目时,首先就要创建并初始化代码库。如果是在本机的工作目录中,那么: $ git init 也就够用了。如果想要初始化的版本库不在当前目录,需要为 git init 命令指定版本库所在的目录: $ …

Spring中的值注释中的占位符支持

Value批注中的${...}占位符用于访问在PropertySource注册的属性。 这对于Spring应用程序中的Configuration bean非常有用,但不仅如此。 为确保可行, PropertySourcesPlaceholderConfigurer必须存在于所有需要占位符解析的应用程序上下文中。 在此博客文…

1688学python学不会_还在害怕学不会Python嘛?这篇文章让你瞬间读懂Python入门!...

零基础学习Python能学会吗?这个问题几乎是所有初学Python的小白都会问到的问题。其实Python是非常适合初学者入门的,相较于其他主流类编程语言,Python具有更好的可读性,因此上手更容易,而且即便你是零基础也一样能学会。献给Pyth…

elisa标准曲线怎么做_ELISA标准曲线绘制

● 设置标准曲线样品的标准浓度范围要有一个比较大的跨度,并且要能涵盖你所要检测实验样品的浓度,样品的浓度要在标准曲线浓度范围之内,包括上限和下限。而对于呈S型的标准曲线,尽量要使实验样品的浓度在中间坡度最陡段&#xff0…

如果今天完成,ESB会是什么样子?

JavaOne 2015即将结束,这又是一次很棒的社区活动。 我和Rafael进行了两次会议和HOL 。 我最喜欢的会议之一实际上是:关于ESB(如果今天完成的话)的样子。 我以为那是过去? 我通常也倾向于这样说。 但是,系统…

线程间的通信 设置线程等待与线程唤醒

代码实现上述框图: 1 //等待唤醒机制2 3 /*4 wait(),notify(),notifyAll()必须用在同步中,因为同步中才有锁。5 指明让持有那个锁的线程去等待或被唤醒,例如object.wait(),表明让持有object这把锁的线程等待。6 7 wait():让线程进入等待状态&…

python sys干嘛的_Python之sys模块

Sys模块函数之多,我只能选取自己认为比较实用的一些函数列在此处。借马云找员工的说法,”找最合适的而不是最天才的”,这句话,我个人觉得在很多方面都能适应,学习也不在话下。Sys模块功能的确很多,但我们应该将重点放在…

centos6.8升级python3.5.2

1.查看系统python版本 [rootmyserver01 Python-3.5.2]# python -V Python 2.6.6 2.升级3.5.2 A.下载:wget https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz 或者在浏览器下载(选择Linux/UNIX平台,选择3.5.2版本) B.编译…

gwt的mvp模式_GWT MVP变得简单

gwt的mvp模式GWT Model-View-Presenter是用于大规模应用程序开发的设计模式。 它源于MVC,它在视图和逻辑之间进行划分,并有助于创建结构良好,易于测试的代码。 为了帮助像我这样的懒惰开发人员,我研究了如何减少使用声明式UI时要编…

简记用ArcGIS处理某项目需求中数据的步骤

文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1. 背景 项目需求涉及如下几个步骤: a.矢量化 b.获取范围内要素 c.合并要素 d.简化要素 e.获取范围外要素。 2. 矢量化 新建图层 开启编辑&am…

从python学编程pdf_教孩子学编程-Python语言版 PDF 高清完整版 网盘资源分享

提取码:2hrr内容简介 本书属于no starch的经典系列之一,英文版在美国受到读者欢迎。本书全彩印刷,寓教于乐,易于学习;读者可以轻松与快递地掌握解决问题方法和程序设计思维的。“编程从孩子抓起”得到越来越多的…

vertical-align属性详解

vertical-align属性详解:http://www.cnblogs.com/wcp-spring/archive/2013/03/04/2942456.html 关于vertical-align属性:http://www.cnblogs.com/hykun/p/3937852.html 对于vertical-align:middle;的使用:http://www.tuicool.com/…

企业应用程序集成简介

本文是我们名为“ Spring Integration for EAI ”的学院课程的一部分。 在本课程中,向您介绍了企业应用程序集成模式以及Spring Integration如何解决它们。 接下来,您将深入研究Spring Integration的基础知识,例如通道,转换器和适…

python实现用户输入用户名和密码不能为空_Python学习【第四篇】用户输入及判断...

用户输入:例1。写一个小程序为用户输入密码。流程如下:1。用户输入其用户名2。输出\u201CHello 用户名\\/usr\/bin\/env python # name raw_input(\u201C你叫什么名字?\u201D)只在pythonname # 输入(\u201C你叫什么名字?\u201D)打印(\u201CHello\u201D名字)例2。当输入一个密…

win7 网络端口怎么设置_教你win7如何设置网络共享文件夹

网络共享是以PC机为载体的信息资源共享。如果我们想让其他人共享我们的文件夹,我们需要进行一些设置。今天,我将分享在win7系统中设置网络共享文件夹的方法现在大多数家庭都使用win7系统,它简化了很多设计,使用起来也很方便。它不…

junit testng_TestNG或JUnit

junit testng多年以来,无论何时使用Java代码进行单元测试,我始终会回到TestNG。 每当我拿起TestNG时,人们都会问我为什么要继续使用TestNG,尤其是默认开发环境(例如Eclipse或Maven)提供的JUnit时。 继续进行…

背单词

背单词 (word.c/cpp/pas) 【题目描述】 fqk 退役后开始补习文化课啦, 于是他打开了英语必修一开始背单词。 看着满篇的单词非常头疼, 而每次按照相同的顺序背效果并不好,于是 fqk 想了一种背单词的好方法!他把单词抄写到一个 n 行…

vue 字符串分割_嗯哼vue组件taginput包教不包会

5分钟实现一个Tag-Input(标签)组件前言本文是wo写组件设计的第一篇文章(处女作),之所以会写组件设计相关的文章,是因为作为一名优秀的前端工程师,面对各种繁琐而重复的工作,我们不应该按部就班的去辛(dao)勤(gen)劳(huo)动(zhong)&#xff0c…

一元操作符——递增和递减操作符(第一次写博客,紧张.)

一元操作符,即只能操作一个值的操作符,是JS中最简单的操作符。 1.递增和递减操作符 分为2个版本:前置型和后置型。若使用前置递增操作符给一个数值加1,要把()放在数值前面: var a 1;a; > va…