Struts 1.x vs Struts 2.x.

时间:2011-05-03 10:07:58

标签: java struts2 struts-1

我已经回顾了一些关于SO的Struts 1 vs 2问题,但似乎没有人从我正在考虑的角度回答这个问题。

我即将开始构建一个新系统,完全重新设计一个非常旧的桌面应用程序。目标是使其基于Web,添加更多功能,使其更有用等(通常的再造原因)。

将开发该系统的团队主要是Java开发人员,并且在过去5年中广泛使用Struts 1.x。

该系统将在未来许多年内存在,因此在更好的框架出现的3 - 5年内再次重新设计的想法不是一种选择。它并不打算大量使用AJAX。

我的问题是,当我的团队对Struts 1.x有如此丰富的经验时,为什么我会费心去Struts 2。我知道有一些改进,但我担心让团队加快速度,因错误使用等而导致返工的时间将远远超过我们从Struts 2获得的任何好处。我们喜欢Struts 1,它做的就是我们需要它,所有的设计模式,标准,最佳实践等都已到位。

Struts 2是否有任何杀手级功能或Struts 1中我不知道的严重问题会影响继续使用Struts 1。

7 个答案:

答案 0 :(得分:9)

如果从头开始构建系统,我肯定会转向Struts的2.x版。 Struts 1.x团队的学习曲线不会很好,但您将能够利用最新的MVC框架。

对我来说,Struts 2.x的两个主要功能是:

  • 内置AJAX支持
  • 不再需要ActionForms - 如果需要,可以直接绑定到域对象,因此这个中间步骤已经消失。

如果这是你正在进行的一个大项目,你可能想看一个组件框架,例如JSF 2或Wicket。如果您决定继续使用基于Action的框架,那么我个人会发现Stripes是一个更高效的框架。

答案 1 :(得分:4)

Struts 1.x是2000年的老式技术。为什么你会考虑在一个全新的应用程序上坚持它?

我能看到的最大缺点是Struts将您锁定在基于JSP的浏览器UI中。 Struts Actions只能在框架内重用。如果需要,您将很难将移动设备无缝集成到该系统中。

我开始考虑Web服务,最好是基于REST的,以及AJAX。世界发生了变化。我会研究Struts的替代品,比如Spring或Play。拿起一个新的网络框架并不是什么大不了的事,但是它的好处可能是值得的。

那些过去五年没有做过任何事情但只使用过时框架的员工也会感谢你。新技能的时间。

更新:如果你已经尝试过,并且不能迟到,而且限制太多,那么我会说你已经知道了答案。你有什么期望来到这里?我没有看到你没有想到的论点。

答案 2 :(得分:2)

鉴于您拥有一支在Struts 1.x方面具有良好经验并且您的产品也很稳定的团队,我认为没有很好的理由迁移到Struts 2.Axache似乎也同意http://struts.apache.org/roadmap.html#migrate_s1

答案 3 :(得分:1)

我认为不是问“坚持使用Struts1还是转向Struts2?”你最好问“坚持使用Struts1还是转向基于现代动作的MVC Web框架?”。为什么搬家?因为Struts1很老而且(坦率地说)很糟糕。为什么不搬家?因为我们必须学习一个新的框架。当然,您知道自己的资源,必须进行评估。但请记住,基于现代动作的框架(Struts2,SpringMVC,Stripes)非常容易学习,如果您的团队已经知道Struts1,那么更是如此。

我自己,我已经从Struts迁移到Struts2,现在我不想回到Struts1编程(那些笨拙的ActionForms!)。我认为Struts2要好得多。但是人们还必须考虑到Struts2也有它的弱点,该项目似乎不是非常健康,社区似乎并不活跃。 从Struts1到Struts2的跳转并不大,但并不像版本更改那么小(“Struts2”是用词不当),跳转到SpringMVC可能并不小,所以我建议考虑它(或者条纹)。

答案 4 :(得分:0)

更一般地说,Struts 2.x分层框架与Struts 1.x相比。例如,在数据层中,Struts 2.x在VO和DAO之间具有DO层。类似地,下面的链接中提到了其他功能。

http://struts.fromdev.com/2008/08/struts-1-vs-struts-2.html ..

由于您的团队对struts 1.x有更多经验,我认为将代码迁移到struts 2.x需要花费更多时间。

请具体说明你期待的是什么样的差异..

答案 5 :(得分:0)

在struts2.0中有更多的功能和优势,在struts2.0中没有形成梁, 一个优秀且功能强大的验证框架,并且大多数在struts2.0中导入,每个请求都有一个操作实例,但在sturts1.x中只有一个用于孔应用的操作实例。

所以选择权归你所有。 :)

答案 6 :(得分:0)

好主要原因是转向struts 2.x代替struts 1.x是 struts 1.x处于维护阶段,现在还没有进行太多积极的开发。

现在当它开始于一个对struts 1.x有很好理解的团队时,他们会很快得到底层系统。但在让我以明确的方式提出一点之前。 struts1.x与struts 2.x没有相似之处,唯一的相似之处是从父母继承的名称。 struts2有以下优点。

  1. 基于行动的框架
  2. 强大的Ajax支持
  3. 拦截器方法(框架的核心) 4与Serve let API分离,这意味着简单的POJO,因此单元测试将更加容易
  4. 但我的观点是简单的struts2和struts1在名称方面仅相似,但就底层架构而言,它们却完全不同。