当前位置: 首页 > 面试题库 >

CRUD:对Roo还是不对Roo?

游皓
2023-03-14
问题内容

我一直在将Groovy on
Rails用于CRUD应用程序。我正在开始一个新项目,在该项目中,我们不再允许使用Grails(我们没有允许的jar和grails列表)。

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


问题答案:

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

Spring Roo和JBoss Seam(带有seam-gen)都使创建CRUD应用程序变得非常容易,就像其他Java全栈/脚手架解决方案(如Play
Framework和RIFE)一样。如果您将两个(Spring
ROO和带有seam-gen的JBoss
Seam)进行比较,那么您可以基于现有数据库或通过添加实体并定义字段和关系来快速运行新的基本CRUD应用程序差别不大。以我的经验,您可以在Spring
Roo中(稍微)快一点,但是通过这两种方式,您都可以在不到一个小时的时间内(如果有现有数据库的话)或不到一天(一半)的时间(在如果您必须手动添加所有实体和关系)。

在继续之前,读者应注意,整个比较是基于我对这两种解决方案的拙劣经验,因此是基于Spring Roo版本1.1.0和JBoss Seam 1.2和2.x。
读者还应注意,目前已经有一个非常好的Seam 3版本(实际上是带有Seam模块插件的CDI(焊接)),它基于Java EE 6规范,但是JBoss
Seam的这个新版本不再具有seam- gen应用程序,因此还不能使用仅几个命令(例如Spring Roo和JBoss Seam
2.x及更低版本)创建完整的CRUD应用程序的功能。目前,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)通过扩展JBoss Seam特定的类,使用基本的OO继承为生成的类添加基本的功能。这确实向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源文件中,然后保持不变)时重新生成ITD。
  • 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 Tool Suite和用于JBoss Seam的JBoss IDE),而所有其他大型IDE(Netbeans en IntelliJ)都对基本框架提供了强大的支持,但是没有Eclipse的IDE(尚未完全确定是否为IntelliJ IDE)没有对Spring Roo生成的ITD的良好支持。这不是构建中的问题,但确实在这些IDE中提供了与智能感知和代码完成相关的功能方面的问题。

尽管这两种出色的产品之间当然还有更多差异,并且我什至没有涉及过诸如可测试性,学习曲线以及这些项目的未来之类的重要问题,但我希望上述项目符号可能已经对正在考虑这两种解决方案的人们有所帮助,做出至少更有根据的决定。我想再次强调,做出决定的最佳方法仍然是使用这两种方法创建概念证明,并查看最适合您的方案。

以我的拙见,可以使您轻松而快速地做出决定的要点是,在Spring堆栈或Java EE堆栈,IDE支持,Web
Framework和解决方案的“成年性”之间进行选择。因此,如果您非常熟悉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解决方案。



 类似资料:
  • 问题内容: 和CSS 和有什么不一样?那你什么时候应该使用呢? 问题答案: CSS绝对定位 绝对定位是最容易理解的。您从CSS 属性开始: 这告诉浏览器应将要定位的所有内容从文档的正常流程中删除,并将其放置在页面上的确切位置。它不会影响HTML中它之前或之后的元素在网页上的放置方式,但是除非您重写它,否则 它将 取决于其父级的位置。 如果你想一个元素从文档窗口的顶部10个像素的位置,你会使用偏移与

  • 问题内容: 我正在上最后一堂课。我复制的阵列使用对象,并且当我改变一个中复制的数组对象,它就会被反映原始数组英寸 我正在输出, 我应该在所有情况下都得到25和26的输出,对吗?为什么会改变? 问题答案: System.arrayCopy()复制对象还是对对象的引用? 参考,这是一个 浅表 副本。出乎意料的是,文档没有明确地说,只是隐式地说,因为他们 只 谈论复制数组元素,而不是递归地复制他们引用的

  • 本文向大家介绍sitecore 确保值是对还是错,包括了sitecore 确保值是对还是错的使用技巧和注意事项,需要的朋友参考一下 示例 要断言值是true还是false,请执行以下操作: 您还可以为异常消息传递格式化参数            

  • 我正在Java SE 8中使用惰性函数操作,我想

  • 如果已知主键的值,那么可以使用这些方法进行 CRUD 操作 对 object 操作的四个方法 Read / Insert / Update / Delete o := orm.NewOrm() user := new(User) user.Name = "slene" fmt.Println(o.Insert(user)) user.Name = "Your" fmt.Println(o.Up

  • 问题内容: 就像标题中所说的,绝对路径名和相对路径名有什么区别?我现在正在上一门计算机组织课程,而我正在上的讲座是Unix中的速成班。演讲幻灯片说: 作为参考,“上一张幻灯片”基本上显示了一个文件树,其根目录/为顶级节点。 幻灯片后显示: 我仍然对绝对路径名和相对路径名之间的区别感到困惑。例如,我在Mac上。我的根目录是/。要从/获得我的文档,我必须这样做。 进入文档后,我需要访问一个名为的文件夹