CRUD:去Roo还是不去Roo?[已关闭]

2022-09-01 09:39:56

我一直在使用Groovy on Rails进行CRUD应用。我正在开始一个新项目,我们不再被允许使用Grails(我们有一个允许的jars列表,Grails不存在)。

我正在考虑使用Spring ROO或JBoss Seam。他们如何比较?他们的主要优势和劣势是什么?


答案 1

请注意,Spring Roo和JBoss Seam没有直接的可比性,因为JBoss Seam本身不提供问题中提到的CRUD应用程序生成。然而,JBoss Seam附带了seam-gen工具,它提供了此功能。因此,最好将JBoss Seam与Spring框架进行比较,并将seam-gen工具与Spring Roo进行比较。我知道这也不是一个完整的比较,但我想这超出了这个话题。需要说明的是,在下面的答案中,当我提到JBoss Seam时,我实际上指的是JBoss Seam与seam-gen工具的组合。

Spring Roo和JBoss Seam(带有seam-gen)都使CRUD应用程序的创建变得非常容易,就像其他Java全栈/脚手架解决方案(如Play FrameworkRIFE)一样。如果你比较两者(Spring ROO和JBoss Seam与seam-gen),基于现有数据库或通过添加实体并定义字段和关系来启动和运行新的基本CRUD应用程序的速度,我想没有太大的区别。根据我的经验,您可以在Spring Roo中快速完成(稍微)一点,但是对于这两个方法,您可以在不到一个小时(如果现有数据库的情况下)或在不到(半个)一天的时间内(如果您手动添加所有实体和关系)即可启动应用程序。

在继续之前,读者应该注意,这整个比较是基于我对这两种解决方案的谦虚经验进行的,因此基于Spring Roo版本1.1.0和JBoss Seam 1.2和2.x。读者还应该注意,目前已经有一个优秀的Seam 3版本(实际上是带有Seam模块插件的CDI(Weld))基于Java EE 6规范,但是这个新版本的JBoss Seam不再具有seam-gen应用程序,因此还没有功能来创建一个完整的CRUD应用程序,只有几个命令,如Spring Roo和JBoss Seam 2.x及更低版本。目前有来自JBoss的人正在研究类似的东西,名为JBoss Forge,它看起来非常有前途,但截至今天,它还没有任何实际的发布,因此我猜还不是一个选择。

Spring ROO和JBoss Seam(带有seam-gen)都创建了一个很好的基本CRUD应用程序,尽管在我看来,Spring Roo生成的应用程序的默认UI设计看起来更好一些,但是由于您可能无论如何都想重新设计它,因此对于任何一个来说,这都不是一个太大的论据。创建的Web应用程序在提供的功能方面也略有不同,但就基本的CRUD功能以及其他基本功能(如身份验证和国际化)而言,它们彼此相当。

我认为主要区别以及决定要做什么的原因,不在于生成基本CRUD应用程序所需的时间,也不在于基架基本CRUD应用程序,而在于更重要的事情,如架构/设计决策,使用,支持,文档,灵活性,可维护性,扩展点等。就我而言,Spring Roo和JBoss Seam都是基于Web应用程序的绝佳选择(事实上,我的团队已经创建了两者的生产应用程序),但是在您做出决定之前,您必须查看这些重要的差异并确定最适合您的方法。当然,最好的决定方法是用这两个选项为自己做一个概念验证,但是如果你没有时间和/或资源,以下是我可以想到的(从我的头顶上)两者之间的差异,这可能有助于你决定任何一种方式:

  • Spring Roo中使用的底层构建系统是Maven,其中JBoss Seam使用Ant.据我所知,Seam也可以与maven一起使用,但seam-gen默认使用Apache Ant。
  • Spring Roo基于Spring框架,而JBoss Seam基于整个Java EE 5堆栈(Seam 3将使用Java EE 6堆栈)。请注意,JBoss Seam 和 seam-gen 工具在默认情况下将使用 EJB 3.0,但这是可选的,您也可以使用 JBoss Seam 和 seam-gen 工具选择非 EJB 解决方案。
  • JBoss Seam(与seam-gen一起)使用基本的OO继承,通过扩展JBoss Seam特定的类来为生成的类添加基本功能。这确实为JBoss Seam(和seam-gen)特定类添加了运行时依赖关系。Spring Roo选择了一种完全不同的方法,通过生成普通的Java源文件(不扩展与Spring相关的类)并注释这些类。除了生成的Java源文件外,Spring Roo还生成一到几个所谓的类型间声明(ITD)文件,这些文件是AspectJ特定的文件,其中包含生成的源代码和注释。这些ITD文件将在编译时完全透明地编织到生成的类文件中,因此不会强加运行时依赖关系。
  • Seam生成的文件可以(并且将)由您更新,但是如果您需要使用seam-gen重新生成文件,它将覆盖您的手动更改,这是因为您将在Seam-gen生成的文件中进行更改。由于Spring Roo使用ITD的方法,您可以在Java源文件中进行更改,以覆盖ITD文件中生成的源代码。这使得Spring Roo可以重新生成ITD,因为它保留了Java源文件中的手动更改,然后保持不变。
  • seam-gen的使用更倾向于一次性生成/使用,以最初设置项目并获得运行启动,而Spring Roo则在项目的整个生命周期中使用。
  • Spring Roo可以从项目中删除,留下一个完全工作的项目,不再依赖于Spring Roo,当然仍然可以以任何您想要的方式构建和扩展。seam-gen实用程序不提供这样的功能,尽管在seam-gen的情况下,你当然从不依赖于seam-gen本身,而是依赖于特定的JBoss Seam包(称为框架)。
  • JBoss Seam(与seam-gen)主要针对使用JSF作为Web框架,而Spring Roo则专注于Spring MVC和/或GWT作为其Web框架。JBoss Seam本身也对Wicktle有很好的支持,但对seam-gen工具没有支持。Spring Roo还有一个Flex插件,社区中还为其他Web框架创建了更多插件,但它们仍然不如Spring MVC和GWT的插件好。
  • 文档适用于JBoss Seam和Spring,但对于Spring Roo和seam-gen工具,他们缺乏更高级的文档。顺便说一句,Spring Roo在命令行shell中也提供了非常有用的提示。
  • IDE 对 JBoss Seam 方法的支持优于 Spring Roo 方法。这两个解决方案都有一个基于Eclipse的特定IDE和插件(SpringSource Tool Suite for Spring Roo和JBoss IDE for JBoss Seam),所有其他大型IDE(Netbeans en IntelliJ)都对基本框架有很好的支持,但是非Eclipse IDE(虽然不完全确定IntelliJ IDE)对Spring Roo生成的ITD没有很好的支持。这在生成中不是问题,但确实在这些 IDE 中提供了与智能感知和代码完成相关的功能的问题。

虽然这两个伟大的产品之间当然有更多的区别,我甚至没有触及重要的事情,如可测试性,学习曲线和这些项目的未来,但我希望上面的要点可能已经帮助那些正在考虑这两种解决方案的人,做出至少一点更有根据的决定。我想再次强调,做出决定的最佳方法仍然是使用这两种方法创建概念验证,并查看哪种最适合您。

在我看来,可能让你做出简单快速决定的要点是Spring堆栈或Java EE堆栈,IDE支持,Web框架和解决方案的“成人”之间的选择。因此,如果你非常熟悉Spring堆栈(我猜你是,看到你来自Grails),那就去Spring Roo,否则你可能会在熟悉Java EE堆栈(包括JSF)方面浪费相当长的时间(当然,这取决于你的项目的大小,但假设它不是一个非常大的项目, 学习新技术的影响对于单个项目来说可能太大了)。如果你不能或不想使用Eclipse,并且对此充满热情,我想JBoss Seam可能是一个更好的解决方案。如果你想使用JSF或Wicket,那就选择JBoss Seam,而如果你想使用Spring MVC或GWT,请使用Spring Roo(对于其他Web框架来说,选择哪个可能并不重要,尽管Spring roo可能是一个更好的解决方案)。如果“成年”是你的主要决定点,我想你最好使用JBoss Seam。总而言之,在两者之间做出决定可能非常困难,但至少要知道,这两种解决方案都非常棒,无论哪种方式都会对你帮助很大。

顺便说一句,请务必密切关注JBoss Forge项目,因为当前的接缝生成解决方案将在不久的将来被这个有前途的项目所取代。


答案 2

只是锻造它 - >http://forge.jboss.org

如果您是新手,您将拥有一个具有持久性,测试和安全性的Web应用程序。以及更多。

如果你了解Java,你将拥有与上面相同的知识来源,以及如何制作好应用程序的知识来源:Forge生成的源代码和资源。你可以学到很多关于Java EE(CDI,Validation,JSF),maven,JPA,tiles,EJB...还有更多。


推荐