是否有任何Delphi工具或加载项可用于帮助重构非面向对象的代码?

时间:2012-06-19 22:44:44

标签: delphi oop refactoring encapsulation

我有一个很大的代码库,我正在使用它有这样的单位:

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有任何想法。欢迎。

2 个答案:

答案 0 :(得分:1)

将全局变换为表单字段似乎只是剪切并粘贴它们。您可以考虑在虚拟过程中移动它们,并使用MMX首先规范化声明。

然后使用ModelMaker Code Explorer将过程和函数移动到表单中,该表单只是在成员视图中剪切和粘贴。

不是必需的,但是作为下一步,从方法体中删除对表单实例的引用。这可以通过查找和替换来实现。

或者我错过了什么?

答案 1 :(得分:0)

Delphi Sonar plugin(开源)不修复代码,但可以使用和配置来搜索“错误代码”:

  

Delphi Sonar插件可以分析使用的项目   德尔福或帕斯卡。它是用Delphi 6,7编写的项目测试的,   2006年和XE。此插件是Sabre Airline Solutions的捐赠。它的   测试包括:计算代码行,语句,文件数,   类,包,方法,访问器,公共API(方法,类   和字段),评论比例,CPD(代码重复,多少行,   阻止和有多少文件),Code Complexity(每种方法,类,   文件; LCOM4,方法,类和文件的复杂性分布   和RFC,单元测试报告,规则,代码覆盖率报告,源代码   突出显示单元测试,“死”代码识别,未使用的文件   识别。