我有一个大型代码库,我正在使用它有这样的单元:
unit myformunit;
interface
type
TMyForm = class(Form)
end;
procedure not_a_method1;
procedure not_a_method2;
var
global1,global2,global3:Integer;
...
简而言之,代码的作者没有编写方法,而是编写了全局过程。有数以万计。在这些过程中,它们引用了MyForm:TMyForm
.
我正在考虑编写一个解析器/重写器实用程序,它将把这段代码变成“至少最低限度的面向对象的代码”。策略是将接口和实现部分全局变量移动到表单中,作为开始。我意识到这不是优雅的 OOP。但这是从全球迈出的一步。
如果我一次可以在一个单元上执行此操作,那么我可能能够修复项目其余部分中的破损,如果我一次只在一个表单上执行此操作。但我想减少重写单元所需的时间,而不是手工完成。有些表单有 500 多个过程和 500 多个接口和实现全局变量,这些变量实际上是特定于它们在同一单元中的表单的单个实例的状态。
基本上,如果不存在这样的东西,我会做的是编写一个基于 Castalia Delphi 解析器的解析器。我希望 ModelMakerCodeExplorer、castalia 或其他一些类似的工具至少可以满足我的部分需求,因此我不必自己构建这个实用程序。即使我必须自己构建它,我估计它可能会自动为我完成大约一千到两千小时的繁重工作。我至少可以运行它,然后看看有多少中断,然后在我决定重构这段代码的努力程度之后恢复或提交。
实现相同目标的替代策略(从零封装和零 OOP,到更多的封装,以及略大于零的 OOP,以增量方式,在大型非结构化 delphi 代码库上,仅在不可避免时使用对象,并且从不对真正的 OOP 有任何想法)欢迎。