Hallo TOC,
zunächst solltest du versuchen, die Abhängigkeiten zwischen den Klassen so weit wie möglich aufzulösen. Je komplexer deine Applikation wird, desto schwieriger wird es mit dieser Struktur, Fehler zu finden und einzelne Klassen zu testen.
Falls du an der Struktur festhalten möchtest oder musst, gibt es folgende Möglichkeiten:
a) "weak" pointer - Bei der Definition werden die Verweise als TObject vereinbart, in der Implementierung sind dann Typecasts notwendig. Das Problem dabei ist, dass du die Typenprüfung des Compilers umgehst und sich sich auf diese Weise weitere Fehler einschleichen können.
b) Interfaces - Neben dem oft zu vernachlässigenden Performanceverlust können bei Kreuzreferenzen Memoryleaks auftreten. Wenn sich zwei Instanzen über Interface-Variablen gegenseitig referenzieren, kann keine der Instanzen automatisch freigegeben werden.
c) Abstrakte Klassen:
Delphi-Quellcode:
Unit Common;
interface
type
TAbstractClass1 =
class
public
procedure Foo1;
virtual;
abstract;
end;
TAbstractClass2 =
class
public
procedure Foo2;
virtual;
abstract;
end;
TAbstractClass3 =
class
public
procedure Foo3;
virtual;
abstract;
end;
implementation
end.
Unit Unit1;
interface
uses Common;
type
TClass1 =
class (TAbstractClass1)
private
FClass2: TAbstractClass2;
public
procedure Foo1;
override;
end;
implementation
uses Unit2;
end.
Unit Unit2;
interface
uses Common;
type
TClass2 =
class (TAbstractClass2)
private
FClass1: TAbstractClass1;
FClass3: TAbstractClass3;
public
procedure Foo2;
override;
end;
implementation
uses Unit1, Unit3;
end.
Unit Unit3;
interface
uses Common;
type
TClass3 =
class (TAbstractClass3)
private
FClass1: TAbstractClass1;
FClass2: TAbstractClass2;
public
procedure Foo3;
override;
end;
implementation
uses Unit1, Unit2;
end.
Man kann solche Strukturen auf die gezeigte Weise aufbrechen, ob es in deinem Fall aber die beste Lösung darstellt, ist aufgrund des gezeigten Quelltextes schwer zu beurteilen.
Gruß Hawkeye