CRUD:Roo还是不Roo?

Lui*_*ixv 32 java seam crud spring-roo

我一直在Rails上使用Groovy for CRUD应用程序.我正在开始一个新项目,我们不再允许使用Grails(我们有一个允许的罐子和grails列表不存在).

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

小智 51

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

Spring Roo和JBoss Seam(带有seam-gen)使得CRUD应用程序的创建变得非常简单,就像Play FrameworkRIFE等其他Java完整堆栈/脚手架解决方案一样.如果你比较两个(Spring ROO和JBoss Seam with 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不再具有接缝 - 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.请注意,JBoss Forge(更换seam-gen,实际上更像是Spring Roo)正在使用Maven.
  • 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本身也对Wickete有很好的支持,但不支持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和插件(用于Spring Roo的SpringSource工具套件和用于JBoss Seam的JBoss IDE)以及所有其他大型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项目,因为当前的seam-gen解决方案将在不久的将来被这个充满希望的项目所取代.

  • 谢谢.一个非常详细和无偏见的答案.作为在VMWare上使用AspectJ和Groovy工具支持​​的开发人员,我希望Spring Roo和Grails之间能够进行更多的比较.但是,既然你提到了它,你能否详细介绍一下你在STS中为Spring Roo找到的工具支持的缺点? (2认同)