SEAM有什么缺点吗?

时间:2009-08-08 18:56:14

标签: java jsf seam

作为一名java Web应用程序开发人员,我去年使用JSF(SUN)作为我的Web应用程序的框架。我不得不说我非常喜欢使用它,它使开发变得更容易。

最近,我已经阅读了很多关于JBoss Seam的好东西,但我还没有遇到过使用它的人。根据我的阅读,似乎SEAM是JSF的下一步。

因此,对于使用过SEAM的人,我的问题是:当你使用这项技术时,你遇到了什么缺点?你会说你觉得这很自然吗?

8 个答案:

答案 0 :(得分:27)

任何框架(如SEAM或Grails)的优势在于它是更高级别的抽象。它会为您提供潜在的细节,如果设计和编写得好,可以使事情变得更容易。

任何框架(如SEAM或Grails)的缺点是它隐藏了很多细节。如果你还没有了解到底下发生了什么,如果你遇到困难并且对你生成的代码一无所知,你会发现自己陷入了困境。

另一个缺点是,他们在模型中构建的假设可能并不总是您想要的。但改变它们意味着打破他们为你准备的道路,这并不容易。

我的建议是使用框架并欣赏它带来的好处,但不要以它们为借口停止学习下面发生的事情。是没有框架可以手工编写整个事物的人,但选择使用它来提供杠杆。

答案 1 :(得分:10)

我在与IceFaces一起进行的大型项目中使用了Seam。 Seam肯定比使用普通的JSF要好得多(请参考Damo发布的链接以上几个答案)。

然而,我记得一些问题:

  • 单元测试:让SeamT​​est正常工作,特别是在持续集成构建中很难,在网上搜索“SeamT​​est问题”。另请参阅:Has anyone successfully run integration tests with Jboss embedded, Seam and Maven?
  • 开发人员执行操作的多种方式,而不是记录太多的最佳实践。所以你必须花时间找出最适合你的项目团队的东西。例如,在实现表单时,这里是潜在的标签(请注意其中一些重叠):

Facelets< ui:repeat>

JSTL< c:forEach>

JSF< h:form>

ICEFaces< ice:selectOneMenu>

JSF< f:selectitems>

Seam< s:button>

  • 表现很可疑,特别是对于IceFaces,here is a related article此外,你需要“大师级别”知识Seam才能做正确的事情,默认方式让你陷入困境。有关详细信息,请参阅此文章:Speed up your Data-Driven JSF/Seam Application by Two Orders of Magnitude - Part 1
  • 因为Seam 3即将发布,并且应该使用2个新的规范(JSF 2和WebBeans),这些规范会对Seam 2上的项目发生了什么以及需要多长时间才能保持稳定
  • 学习曲线。 IMHO seam尝试做太多,给你包装iText,Quartz,JExcel,jBPM等等。而Seam与第三方框架的集成有望落后于最新版本。例如,我们必须直接集成jBPM,因为我们需要一些最新的功能。
  • 可能是因为JPA 1.X中缺少标准查询,你实现动态搜索屏幕的方式(用户填写了很多过滤器选项,你必须生成动态HQL)感觉非常优雅,这个在使用推荐的“Seam应用程序框架”EntityQuery类时,请参阅下面的链接以获取一个简单示例,但您可以了解复杂过滤条件的预期,处理空值,order-by和all:{{3} }

答案 2 :(得分:6)

说“Seam是JSF的下一步”是不正确的。 Seam不必使用JSF作为视图层。它也可以使用WicketGWT

然而,当与JSF一起使用时,它可以很好地简化它。您拥有的XML配置比标准JSF少,我经常忘记JSF没有像EL中的对话上下文或参数化方法调用那样的东西。例如:

<h:commandButton action="#{myBean.sayHello('damo')}" value="hello"/>

它易于使用,并且在任何地方使用POJO的能力都非常自由。与JSF相关的最大缺点是:

  • 过分依赖HTTP POST(其中 s:button/link并不总能解决)
  • 很多javascript
  • 过度调用Getters / Setters
  • 令人讨厌的HTML;等等。

有足够多的页面详细说明了JSF elsewhere的缺点(注意这些不是对Seam的批评 - 而不是JSF1.x,而且很多都是在JSF2.0中解决的)

我不相信Seam是JSF的“下一步”,但如果你现在计划使用JSF1.x,那么它和Facelets是至关重要的。

我认为JSF2.0WebBeans是下一步。

答案 3 :(得分:2)

答案 4 :(得分:1)

我感觉很自然,使用注释可以让生活更轻松。我甚至无法想象使用getAttribute / getParameter框架。一个缺点是seam-gen不能与Maven一起使用(但是Seam3将基于Maven)。我认为Seam让你专注于你想要实现的目标,而你必须考虑如何去做其他框架。你有没有试过用javascript / prototype / jquery做Ajax?与使用方法调用的seam Ajax按钮和reRender的内容相比,这真的很痛苦。使用seam和Rich Faces完全不需要Javascript。对我而言,这是我用过的最好的框架。

答案 5 :(得分:1)

我喜欢JSF,不久前我评估了Seam。 JSF是一个Web UI框架,而Seam是一个更通用的Web应用程序框架,它不仅集成了JSF,还集成了会话上下文,工作流(jBPM)和对象持久性(最好是EJB3)。我第一次被广告中自动生成的脚手架吸引到Seam,但我从来没有让它与我的企业数据模型一起工作。从那时起,我对Spring Framework和Spring JSF越来越感兴趣。它吸引我更模块化,如果你使用iBATIS,它只需要一个像Tomcat这样的servlet容器,而不是像JBoss这样的Java EE容器。春天已经存在了很长时间,并且有更多的思想分享。

对于JSF和facelets来说,ICEfaces也很棒,无论是否有像Seam或Spring这样的应用程序框架,它都可以很好地工作。

答案 6 :(得分:1)

作为一个集成框架,Seam在与您想要使用的其他框架配对时,确实会显示其实用性。

如果你将要使用EJB和JSF,那么SEAM就是杀手锏。

如果您要使用JSF(以及任何相关工具,如IceFaces或RichFaces),SEAM POJO可以简化您的设置,并让您访问seam提供的生命周期状态(对话)等等。)

如果您正在使用带有Wicket或GWT的EJB,Seam也可能会为您节省一些配置,但是,我没有亲自在此配置中使用它。

正如前面所说,Seam的缺点是任何抽象框架都固有的:它隐藏了你的细节。如果它开始泄漏,你就麻烦了。我还没有泄漏它,但我也花时间给自己一个很好的,基本的理解它是如何工作的。 EL如何与Seam Annotations等配合使用。

您是否要找到有用的接缝取决于您将要使用它的框架。 Seam肯定有它的甜蜜点,但那个地方正在增长。 Seam肯定不是一个死的项目。 :)

答案 7 :(得分:0)

您始终可以使用Factory annotation来避免一遍又一遍地调用相同的方法。 Factory允许更新组件。