Malheureusement, j'ai hérité d'un morceau de conception malchanceux basé sur un "enfer" {$IFDEF}
.Comment déterminer les dépendances pour toutes les unités? (Estimer le coût de refactoring)
Ce que je ressemble à peu près comme ça (où MyDbSystemB
est ce que je veux ajouter)
unit MyTable;
interface
uses
// ...
{$IFDEF MyDbSystemA}
DbSystemA ,
{$ENDIF}
{$IFDEF MyDbSystemB}
DbSystemB ,
{$ENDIF}
type
TMyTable = class(
{$IFDEF MyDbSystemA}
TSystemATable
{$ENDIF}
{$IFDEF MyDbSystemB}
TSystemBTable
{$ENDIF}
)
// A public interface implementation
end;
implementation
// ...
end.
Un certain nombre d'unités de référence TMyTable
, mais elles reposent sur des fonctions spécifiques fournies avec TSystemATable
:
unit oldUnit;
interface
uses MyDbTable;
type
TXy = class(TXyz)
public
procedure Foo();
end;
implementation
procedure TXy.Foo();
var
table : TMyTable;
begin
table := TMyTable.Create();
table.SomeSystemASpecificFunction;
end;
J'aimerais trouver toutes ces références dans une seule vérification de référence/syntaxe. Mais comme je lis ici ce n'est apparemment pas vraiment possible
Quelle serait la meilleure stratégie pour trouver ces fichiers pour estimer les efforts de portage?
Un simple fichier grep sur tous
*.pas
fichiers (il peut y avoir beaucoup de morts, soit le code, ou tout simplement des choses mal découplé)?Je suis également en mesure de fournir une implémentation de remplacement de
TMyTable = class({ ... like above }) {$IFDEF MyDbSystemB} public procedure SomeSystemASpecificFunction; deprecated; {$ENDIF} end;
avec la mise en œuvre de
TMyTable
, mais je aurais besoin d'estimer le coût de refactoring pour le faire correctement de toute façon. En ce qui concerne ce que je pourrais également ajouter un attributdeprecated
avec le substitutSomeSystemASpecificFunction
, cela me donnera au moins des avertissements.
Il suffit de commenter l'unité et voir ce qui se passe. Résolvez les erreurs que vous trouvez, en recompilant constamment pour voir ce qui reste. –
@Rudy C'est exactement ce que je veux éviter (avec cette grosse base de code). – user0042
C'est probablement le seul moyen viable de démêler toutes les différentes références à certaines classes et autres identifiants. –