Struts 1.x vs Struts 2.x.

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

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

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

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

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

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

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

对我来说,Struts 2.x的两个主要function是提高生产力:

  • 内置AJAX支持
  • 没有更多ActionForms – 如果需要,您可以直接绑定到域对象,因此这个中间步骤已经消失。

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

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

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

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

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

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

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

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

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

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

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

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

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

在struts2.0中有更多的function和优势,在struts2.0中没有forms梁,一个好的和强大的完整validation框架,并且大多数在struts2.0中导入,每个请求都有一个动作实例,但仅在sturts1.x中孔应用的一个动作实例。

所以选择是你的。 🙂

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

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

  1. 基于行动的框架
  2. 强大的Ajax支持
  3. 拦截器方法(框架的核心)4与Serve let解耦,这意味着简单的POJO,因此unit testing将更加容易

但我的观点是简单的struts2和struts1在名称方面仅相似,但就底层架构而言,它们却截然不同。