私は、次のようなユニットを持つ大規模なコードベースを使用しています。
unit myformunit;
interface
type
TMyForm = class(Form)
end;
procedure not_a_method1;
procedure not_a_method2;
var
global1,global2,global3:Integer;
...
つまり、コードの作成者はメソッドを作成したのではなく、グローバル プロシージャを作成しました。それらの数は何万もあります。これらのプロシージャ内では、 の 1 つのインスタンスを参照しますMyForm:TMyForm
。
このコードを「少なくとも最小限のオブジェクト指向コード」に変換するパーサー/リライター ユーティリティを作成することを検討しています。戦略としては、インターフェイスと実装セクションのグローバルをフォームに移動することから始めます。それはほとんどエレガントな OOP ではないことに気付きました。しかし、それはグローバルからの一歩です。
一度に 1 つのユニットでこれを行うことができれば、一度に 1 つのフォームでのみ行うと、プロジェクトの残りの部分で破損を修復できる可能性があります。しかし、手動で行うのではなく、ユニットの書き換えにかかる時間を短縮したいと考えています。一部のフォームには、500 以上のプロシージャと 500 以上のインターフェイスおよび実装グローバル変数があり、これらは実際には、同じユニット内にあるフォームの単一インスタンスの状態に固有のものです。
基本的に、このようなものが存在しない場合は、Castalia Delphi パーサーに基づいてパーサーを作成します。おそらく、ModelMakerCodeExplorer、またはキャスタリア、または他の同様のツールに、少なくとも私が必要とするものの一部を実行する何かがあることを願っているので、このユーティリティを自分で構築する必要はありません. 自分でビルドする必要があるとしても、1,000 時間から 2,000 時間の単調な作業を自動化できると見積もっています。少なくともそれを実行して、どのくらい壊れているかを確認し、このコードをリファクタリングする労力のレベルを決定した後で、元に戻すかコミットすることができます。
同じ目標を達成する代替戦略 (カプセル化ゼロと OOP ゼロから、カプセル化を増やし、OOP をゼロよりわずかに大きくする方法で、避けられない場合にのみオブジェクトを使用し、決してオブジェクトを使用しない大規模な構造化されていない Delphi コードベースで段階的に進めます)。本当の OOP について何か考えがあった) を歓迎します。