将遗留Web应用程序迁移到现代框架的建议

时间:2009-02-20 15:38:48

标签: java web-applications servlets migration

我目前正在为一家运行基于Java Servlets构建的遗留Web应用程序的公司做一些工作(该系统早于JSP,尽管他们现在在构建新页面时使用它们)。代码库是一个巨大的乱七八糟的混乱,因为它在过时的框架之上建立了大约10年。它们在代码库中几乎没有一致性(这个应用程序已经由不同的人多年来开发,其中大部分都不再在这里工作),没有DRY的概念(每个页面基本上都是从头开始创建的)很多不可读/含糊不清代码和一般非常不一致的基础架构。

由于我一直在这里工作,我一直在添加现代功能/尝试清理代码库一点点。我在我暴露的地方添加了一些jQuery,通过输入验证引入了一些安全性,清理了一些模块以采用不引人注目的JavaScript原则等。我的工作是在新模块上,所以我没有暴露很多旧的逻辑。我试图在他们当前的基础设施下为我的所有工作引入最佳实践,但我不得不调用他们的旧代码来使我的东西保持一致。

他们已经达到了他们正在考虑对系统进行大规模更新的程度。他们希望提高代码库的可维护性,并尝试转向某种现代框架/ MVC类型的应用程序。许多系统早于XHTML,内联样式标记,javascript:function()调用,没有单元测试,早于Hibernate等。有一些out.println html生成和从Servlet中调用jsp。

他们一直关注的一些应用程序包括Wicket,Struts,Tapestry和Grails。问题是,转向其中任何一个可能需要对已经在使用的系统进行大量重写,并且他们无法重新开始。

我的问题是:在保留现有业务逻辑的同时,将诸如此类的遗留代码库迁移到更现代的框架的最佳方式是什么(在重写经过测试和工作的内容时没有意义。)

正在考虑的一些想法包括:

  • 编写一个可与​​当前基础架构配合使用的内部模板系统(以一致的方式生成页面)

  • 将端口代码添加到诸如tapestry之类的框架中(重用大量旧代码)

  • 使用现代框架从头开始重写系统,但从旧系统复制逻辑(如果可能)

  • 按原样保留旧系统,只需更新前端页面,使其外观更加现代(最好给出时间/金钱等)。

将旧Java Servlet代码更新为现代框架(使用现代实践以便于维护,单元测试,DRY)同时保持逻辑完好无损的最佳方法是什么?

欢迎任何见解。

5 个答案:

答案 0 :(得分:3)

重新摆脱困境,努力实现一贯的设计风格,作为初步将其移植到最接近精神的框架,以及最终的风格。

按照“重构”我的意思 - 。介绍在战略位置的测试,单元以及功能,并且像狂,以减少重复,靠在这些测试工作

答案 1 :(得分:2)

几个月前我问过一个非常相似的问题,其中一些答案对你有用:

What is the best way to migrate an existing messy webapp to elegant MVC?

答案 2 :(得分:1)

对于这类问题没有明确的答案,但我的主要提示是首先阅读主题。阅读那些了解他们所谈论内容的人的书籍。

例如,Code Complete(Steve McConnell),ch。 24重构。

  • 保存以

  • 开头的代码
  • 保持重构

  • 一次进行一次重构

  • 添加例程,类,修复缺陷时重构

  • 定义干净和丑陋的代码之间的接口

  • ...

您可以使用许多其他印刷和在线资源。之后,如果你有一个更具体的问题,你可以使用像SO这样的网站来获得比这个更有用的答案。

答案 3 :(得分:0)

最好的方法:将现有应用程序用作功能规范,并从头开始构建新应用程序(在可行的情况下使用一些可能的cut-n-paste重用或实际的类重用)。

根据我的经验,尝试将写得不好的遗留应用程序搞砸到一个新的框架中,或者试图用好的代码“包装”垃圾代码只会导致从长远来看维护起来更加困难和昂贵。

答案 4 :(得分:0)

这只是我的意见,因为我认为这个问题是人们付出昂贵的顾问来解决问题(通常最终只是浪费钱!请参阅thedailywtf.com的例子)。

我认为它不值得完全重写,因为在重写过程中,您可能还必须维护原始应用程序*,因此重写将有一个移动目标。更好的方法是在重构时偿还代码债务 - 也就是说,实现一个简单功能需要2倍,3倍甚至10倍的努力,仅仅因为以一种很好的方式实现它需要重构堆。但这项工作是必要的,因为这个应用程序所欠的债务很高,最终必须以某种方式支付。

它可能会受伤,但良药会伤害。

  • 如果你有足够的时间来进行重写,即原始应用程序被冻结而不进行维护(甚至没有修复错误),那么它可能会完全重写为您认为合适的任何框架。但我非常怀疑任何机构都会如此。