应用迁移时需要注意的事项:从ColdFusion迁移到Spring

3
这个问题是关于迁移项目的。目前,遗留应用程序使用ColdFusion编写,我们希望将其迁移到Spring Framework。
我的主要问题如下:
1.在考虑迁移项目时需要注意哪些事项?
2.在考虑从ColdFusion迁移到Spring Framework时,是否有任何特别需要注意的事项?
3.ColdFusion与Spring Framework相比如何?
4.在开始从ColdFusion到Spring的迁移项目之前,你会推荐哪些资源来让自己熟悉?
我知道有些人可能认为这是一个非常开放的问题,但这是我的第一个迁移项目,我从未有过任何迁移项目经验,所以正在寻找一些有用的指导。

如果这个问题需要更新,让我知道...这可能会使它更有价值。 - Rachel
为什么要首先进行迁移?考虑升级到CF9,并将过时的代码重构为CFC,使用现代化的CF MVC框架如何? - Henry
迁移是一个必要的需求,因此必须完成。 - Rachel
2个回答

6
迁移项目充满危险。
第一个危险是,“这很昂贵和痛苦。让我们从头开始重建并使用结构化方法实现任何市场营销人员/管理人员/程序员拥有的新想法或功能等等..." 这条路会导致失败,因为
1) 它需要无限量的工作,
2) 没有人真正知道旧系统在做什么(最近看过规格吗?),因此在新系统上线后,您将以巨大的痛苦和对组织能力造成损害的方式重新发现旧系统。事实上,通常情况下,新系统永远也赶不上旧系统,因此重写会死得很惨。
正确的迁移方式是:坚持保留功能,并转换现有系统。没有新的好处、特性、方法。
这种坚持也有自己的麻烦:组织通常必须在迁移发生期间进行一些变更以求生存。
为了解决这个问题,你需要一个自动化迁移工具,这样“没有功能变化”的规则只适用于实际转换过程,并且尽可能短。迁移工具的开发人员可以花费一些时间来构建它并彻底测试转换工具;与此同时,组织可以通过其通常的方法增强遗留系统。当迁移工具准备好时...启动触发器,转换代码,修补问题并测试结果系统的有效性。
一旦系统迁移完成,你可以考虑进行根本性的重组或重塑,因为基本功能仍然良好。
无论你选择什么样的自动化迁移工具,都要注意它生成的代码在新环境中是可维护的。许多转换器真正地进行了天真的1对1转换,结果产生的代码最终成为了遗留FOO代码在新BAR中的版本,或者被嘲笑为“JOBOL”,即天真的COBOL到Java转换。转换工具必须在语言结构映射方面非常复杂。(你可能想阅读这篇SO讨论PL/1 To Java Conversion)。
您最大的问题可能是“测试”。当前系统有完整的功能测试,对吗?嗯,你没有任何功能测试?如何验证新系统正确实现了旧系统的功能?
正确的答案是基于旧系统的输入输出行为构建测试,并将这些测试应用于旧系统和迁移后的系统。这是很多工作量,没有人想做它,更不用说为它付费了。这是迁移失败的第二种方式。
最后发生的事情是管理层对完成这项工作所需的资金和时间进行了可悲的低估。通常与开发团队的谈判会像这样进行:
Mgr:  How long to do this?
Team:  Two years...?
Mgr:  BZZZT!  Wrong answer, try again...
Team:  One year?
Mgr:  BZZT! ..
Team: (Gulping) 6 months?
Mgr:  OK, get started.

请注意这里实际上没有讨论工作内容。
6个月后,责备开始了。经理:“我问过你们,你们说需要6个月...”
你将会经历一次艰难的旅程,一定要认真准备。坚持要求人们列出所有问题,并给出可信的估计。如果这是你第一次迁移,你没有依据来做出这样的估计;如果这是组织的第一次,它没有依据来判断任何估计是否正确。
(完全披露:我有偏见。我已经为自动迁移工具开发22年了。请查看B2 migration。)

5
很大程度上取决于您的CFML应用程序的现有结构。虽然CFML有一个框架与Spring的IoC部分非常相似,但我猜您要做的是从非结构化的CFML应用程序迁移到Spring Web,而不仅仅是迁移IoC部分 - 而且您要从一种语言转换到另一种语言:从CFML到Java。
因此,事实是:这不是一个迁移项目,而是完全的重写。
我知道您说“迁移是必需的”(错字),但我认为您需要更详细地解释一下是什么原因推动了这个决定,这样人们才能提供比“你疯了,别这么做!”更好的答案 - 因为根据您提供的少量信息,没有人能够提供有用的答案。
至于此类迁移的机制,如果您有一个结构良好、MVC CFML应用程序,使用ColdSpring,您可以逐步将模型迁移到Java,并使用Spring的IoC代替ColdSpring进行bean管理(您需要让Spring成为ColdSpring的父bean工厂,以便您的所有CFML代码仍然可以访问新迁移的bean)。
一旦您将所有模型(和数据访问层)迁移到Java / Spring,您将处理将所有.cfm视图页面翻译为.jsp视图页面,并将所有CFML控制器/监听器(取决于使用哪个CFML框架)重写为Spring Web处理程序。
这可能是一个巨大的项目 - 这是在假定已经使用ColdSpring管理模型的结构良好的MVC框架驱动的CFML应用程序的情况下。
我敢打赌您要开始处理的是一个非结构化的混乱(这就是为什么有一个迁移指令),如果是这样,那么您的巨大项目会更加庞大。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接