我目前正在为一家运行基于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)同时保持逻辑完整的最佳方法?
欢迎任何见解.