2011-10-22 100 views
5

我想知道在这两种技术中有经验的人是否可以在两者之间进行客观比较,假设您正在构建一个复杂的Web应用程序,该应用程序在服务器和服务器上都非常丰富浏览器。GWT和Spring MVC之间的比较

对于我来说,旧范式的一个问题是Spring MVC层的可测试性。我发现由于无法测试注释,有很多bug可能会蔓延到您的应用程序中。这种模式也会减慢开发周期,因为你必须重新启动服务器来对注释/控制器代码进行更改...这是我个人觉得非常烦人的事情。

我也不想处理JavaScript的复杂性。使用Java测试应用程序听起来很吸引我。我不想掌握另一种语言,并学习它的所有怪癖,奇怪的设计决策,特质和浏览器不兼容的全部历史。

因此,对于一个复杂的应用程序,GWT会提供一个更好的方法吗?这种方法对Spring MVC有没有什么严重的限制,虽然很难处理,但它可能会更灵活。建筑复杂应用程序中是否有任何常见问题和障碍?

我真的很感谢两者之间的比较。请记住,我没有使用GWT的经验,但与Spring有10年以上的经验。谢谢!

+0

当考虑GWT时,检查性能是否可以接受。 –

回答

4

事实上,GWT也有一条学习曲线,至少在我看到它的时候,两年前,你对基本控制没有太大的作用,你需要外部库,这意味着更多的学习。

在试图学习GWT没有太多成功之后,我选择了一个web服务加上jQuery或ExtJS,这也给了角色的一个非常干净的分离。我坐下来学习JavaScript,这并不容易,但它比使用GWT更有趣。

至于浏览器的兼容性,一旦你使用了一个现代化的图书馆,你将只有很少的一部分。我的代码适用于所有浏览器,没有太多问题,包括IE 6.同样,当我太忙时,我只写服务并外包JavaScript接口部分,这可以提高生产力。

无论如何,这是相当主观的,另一个能够流利GWT的人,可以有我的相反观点。无论如何我会拒绝以下原因:

  • 易于调试。不再真实:使用FireBug调试JavaScript非常容易,而且在JavaScript中不会有任何业务逻辑,只有服务调用和显示。
  • 浏览器兼容性。有很少的怪癖要记住,最常见的是IE不接受列表中的尾随逗号,这是无论如何不是标准,但Firefox允许它们。任何现代JavaScript库都会为您提供兼容性。
  • 速度。首先,我将声明JavaScript对于浏览器中的任何合理计算都非常快速。什么是较慢的DOM操作,当然还有涉及网络的任何事情,比如AJAX调用。如果您不设计错误,比如填充太多东西或将多个元素直接添加到DOM时可能会出现的其他问题,而不是构建您的结构,然后一次性附加它,您的页面就会正确执行。

至于我现在可以认为,唯一有效的原因是,我已经知道Java的,我不想学习另一种语言

至于你对Spring MVC的评论。我使用Spring MVC,我不觉得重新启动服务器的痛苦。 Spring的全部意义在于,容器外的任何事情都应该很容易实现!在Spring控制器中,我只需调用底层服务的最小代码。我需要单元测试的是服务。

控制器有很少的代码可以测试,我可以直接调用它们并在JUnit中测试它们,但至少现在我的方法是通过一个带有jQuery调用的网页进行简单的外部测试,响应(这不是单元测试,它是一个集成测试,但是如果单元测试正确,我认为单元测试控制器的价值很小)。

+0

我也测试我的控制器,所以也许我应该更清楚。在单元测试中单元测试您的控制器的注释是不可能的。例如,如果您忘记将@PathVariable添加到方法参数中,您的单元测试仍然会通过。另外,如果您错误地命名或拼错请求映射,则需要重新启动服务器。很显然,这种烦恼会因人而异,但我希望能够尽可能多地测试这些东西,甚至在我启动tomcat来测试视图之前。另外,Spring Container/Hibernate对于大型应用程序启动速度很慢。 – egervari

+0

我收到你的额外解释。然而,GWT并不是Spring的替代品,所以你所概述的问题在Spring + GWT设置中仍然存在。对于我的答案的其余部分,当然这是我的看法。 – stivlo

+1

如果是这样,那么我认为我已经完成了编写Web应用程序的工作。我只是不喜欢JavaScript。在所有浏览器中提供的基本API非常糟糕,我发现自己依靠4-6个基本库(上面的jquery和jquery插件)来获得基本的编程API。有很多JavaScript编码风格,命名约定等等,我认为对于多年来一直没有使用它的人来说,认知负担太大。这真的很不幸。另外,我尝试了各种单元测试方法,但都没有达到我的满意度。这只是不幸的。 – egervari

4

我现在在一个复杂的项目中使用GWT超过一年(整个项目为200 KLOC),我建议您试一试GWT。

在我看来,GWT很容易学习,关于如何使用这项技术的确有很好的tutorials

使用GWT的优点是,人们可以构建漂亮,快速,可维护的网络应用程序,而对浏览器或JavaScript知之甚少。您还可以使用Java调试器来调试您的客户端代码,并且在复杂的应用程序中这是巨大的。

虽然GWT提供了适当的单元测试客户端代码的可能性,但这需要对GWT的MVP范例和精心策划有一个很好的理解。如果你搞乱了你的代码(这并不难,因为GWT给你完全的自由),那么你最终会失去这个功能,但这是你的错,而不是GWT的。

1

我花了几个月的时间学习Spring,足以创建相当的基础MVC应用程序。我花了大约一个月的时间来掌握GWT。 (这可能更容易一些,因为我已经使用了Android三年了,它的工作方式类似,甚至对于它的一些问题甚至有完全相同的非显而易见的解决方案。)对于我来说,GWT肯定比学习更容易弹簧。