Ho una grande base di codice che sto lavorando con il quale ha unità di questo tipo:C'è qualche strumento o componente aggiuntivo per Delphi che posso usare per aiutare il codice refactor che non è orientato agli oggetti?
unit myformunit;
interface
type
TMyForm = class(Form)
end;
procedure not_a_method1;
procedure not_a_method2;
var
global1,global2,global3:Integer;
...
In breve, del codice gli autori non hanno scritto i metodi, hanno scritto procedure globali. Ce ne sono decine di migliaia. All'interno di queste procedure, fanno riferimento a una singola istanza di MyForm:TMyForm
.
Sto pensando di scrivere un'utilità di parser/rewriter che trasformerà questo codice in "codice almeno minimamente orientato agli oggetti". La strategia è quella di spostare l'interfaccia e le sezioni globali di implementazione nel modulo, come inizio. Mi rendo conto che non è elegante OOP. Ma è un passo avanti rispetto ai globali.
Se potessi farlo su una unità alla volta, potrei essere in grado di riparare la rottura nel resto del progetto, se l'ho fatto solo su un modulo alla volta. Ma mi piacerebbe ridurre la quantità di tempo necessaria per riscrivere le unità, invece di farlo a mano. Alcune forme hanno oltre 500 procedure e oltre 500 interfacce e implementazioni globali variabili che sono in effetti specifiche dello stato di una singola istanza del modulo in cui si trovano nella stessa unità.
Fondamentalmente, cosa farò se non esiste nulla di simile è scrivere un parser basato sul parser di Castalia Delphi. Spero che forse ModelMakerCodeExplorer, o castalia, o qualche altro strumento simile abbia qualcosa che possa almeno fare parte di quello che mi serve per me, quindi non devo costruire da solo questa utility. Anche se dovessi costruirlo da solo, penso che potrebbe automatizzare da mille a duemila ore di lavoro per me. Posso almeno eseguirlo, e poi vedere quante pause, e poi ripristinare o eseguire il commit dopo aver deciso di eseguire un refactoring su questo codice.
Strategie alternative che raggiungono lo stesso obiettivo (passare da zero incapsulamento e zero OOP, a più incapsulamento e leggermente più di zero OOP, in modo incrementale, su una base di codice delphi grande e non strutturata che utilizzava solo oggetti quando era inevitabile, e non ha mai avuto alcuna idea di OOP reale) sono i benvenuti.
Avendo attraversato qualcosa di simile, tutto quello che posso dire è, buona fortuna, ne avrai bisogno. :( –
Ottima domanda e scenario, penso solo che 1-2K ore (circa 40 giorni non-stop) è probabilmente un po 'più di quanto potrebbe probabilmente fare.Ho fatto * un po' * Pascal/dfm parsing prima e con la destra strumenti, in realtà non è così difficile, sto cercando di trovare quello che ho usato per questo in questo momento, ma credo che fosse sulla falsariga di "Gold Parser" che può avere un add-on esplicitamente per Pascal ... http: //www.goldparser.org/engine/1/delphi/index.htm –
In realtà, i loro "Grammars" includono uno per Delphi 7 in particolare –