我目前正在为一家公司运行一些工作,该公司运行基于Java Servlet构建的旧版Web应用程序(该系统早于JSP,尽管现在他们在构建新页面时会使用它们)。代码库是一个困惑的大困惑,因为它是在一个过时的框架之上构建约10年。它们在代码库中几乎没有一致性(多年来,该应用程序是由不同的人开发的,大多数不再在此处使用),没有DRY的概念(每个页面基本上都是从头开始创建的),很多不可读/含糊不清代码和总体上非常不一致的基础架构。

当我在这里工作时,我一直在添加现代功能/尝试稍微清理一下代码库。我在暴露的地方添加了一些jQuery,通过输入验证引入了一些安全性,清理了一些模块以采用不干扰JavaScript的原理,等等。我在这里的工作是在新模块上进行的,因此我不会接触到很多旧的模块逻辑。我试图在他们当前的基础架构下为我的所有工作引入最佳实践,但是我不得不调用他们的许多旧代码来使我的东西保持一致。

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

他们一直在寻找的一些应用程序包括Wicket,Struts,Tapestry以及可能的Grails。问题是,迁移到其中任何一个都可能需要对已经在使用中的系统进行大量重写,并且它们无法重新开始。

我的问题是:将这样的旧代码库迁移到更现代的框架,同时保留现有业务逻辑的最佳方法是什么(重写经过测试和工作的东西毫无意义)。

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

  • 编写一个内部模板系统,该系统将与它们当前的基础结构一起工作(以一致的方式生成页面)
  • 将代码移植到挂毯之类的框架(重复使用许多旧代码)
  • 使用现代框架从头开始重写系统,但是从旧系统中复制逻辑(如果可能)
  • 保持旧系统不变,只是更新前端页面以使其具有更现代的外观(考虑到时间/金钱等,可能最好)。

  • 在保持逻辑完整的同时将旧版Java Servlet代码更新为现代框架的最佳方法是什么(使用现代方法进行轻松维护,单元测试和DRY)?

    欢迎有识之士。

    最佳答案

    重构它,朝着一致的设计风格努力,作为将其移植到与最终风格无关的精神上的初步准备。

    通过“重构”我的意思是 - 引进战略位置测试,单元以及功能,并且工作拼了命减少重复,倚在这些测试。

    10-06 09:19
    查看更多