2 votes

Séparation des classes d'interface et d'implémentation dans Delphi ?

Je sépare mon code Delphi en unités d'interface et d'implémentation, par exemple.

EmployeeIntf.pas ressemble à ceci

type
 // forward declaration
  TScheduleList = class;
  TDeparment = class;
 TEmployee = class(BDObject)
  ....
    function GetSchedules: TScheduleList;
    function GetDepartment: TDepartment;
 end;

 TEmployeeList = class(DBList)
  ....
 end;

 TEmployeeDM = class(BDDBobject)
  ...
 end;

Ensuite, j'ai les deux unités ScheduleIntf.pas & DépartementIntf.pas qui déclarent la classe TScheduleList et la classe TDepartment.

Ensuite, dans mon unité principale qui combine toutes les unités, cela ressemble à ceci,

Unit BusinessDomain
Interface
uses
 classes
  {$I Interface\EmployeeIntf.pas}
  {$I Interface\DepartmentIntf.pas}
  {$I Interface\ScheduleIntf.pas}
Implementation
uses
 SysUtils
 {$I Implementation\EmployeeImpl.pas}
 {$I Implementation\DepartmentImpl.pas}
 {$I Implementation\ScheduleImpl.pas}
Initialization
finalization

end.

Lorsque je compile ce fichier, le compilateur génère une erreur ;

*Type TScheduleList is not yet completely defined*

Comment puis-je avoir ces classes séparées dans chaque fichier d'unité (.pas) et ensuite faire des déclarations en avant sans que le compilateur jette cette erreur ?

Les classes elles-mêmes sont énormes et je préfère les séparer de cette façon.

Gath

1voto

Toon Krijthe Points 36327

Si vous aimez vraiment séparer l'interface et l'implémentation, jetez un coup d'œil à Modula2. Il s'agit également d'une application similaire à Pascal, mais elle utilise deux fichiers pour chaque "unité". Un pour l'interface et un pour l'implémentation.

Une autre solution consiste à diviser les fichiers ou les définitions de classe, et à écrire un préprocesseur personnalisé qui les relie (en termes de texte). Vous obtenez alors quelque chose comme :

unit BusinessDomain
interface
uses
 classes;

type
  Employment = class from Interface\EmployeeIntf.pas;
  Department = class from Interface\DepartmentIntf.pas;
  Schedule = class from Interface\ScheduleIntf.pas;

implementation
uses
  SysUtils;

external define
  Employment = class from Implementation\EmployeeImpl.pas;
  Department = class from Implementation\DepartmentImpl.pas;
  Schedule = class from Implementation\ScheduleImpl.pas;
end;

end.

Avec Delphi 2009, vous pouvez émettre des commandes avant et après la phase de construction. Donc, techniquement, c'est possible.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X