Delphi Enterprise: Wie kann ich das Besuchermuster ohne Zirkelverweise anwenden?

Mit Delphi 2009 Enterprise habe ich in der Modellansicht Code für das GoF - Besuchermuster erstellt und den Code in zwei Einheiten aufgeteilt: eine für die Domänenmodellklassen und eine für den Besucher (da ich möglicherweise andere Einheiten für verschiedene Besucherimplementierungen benötige, alles in eine Einheit? 'Große Schlammkugel'voraus!).

unit VisitorUnit;

interface

uses
  ConcreteElementUnit;

type
  IVisitor = interface;

  IElement = interface
  procedure Accept(AVisitor :IVisitor);
  end;

  IVisitor = interface
  procedure VisitTConcreteElement(AElement :TConcreteElement);
  end;

  TConcreteVisitor = class(TInterfacedObject, IVisitor)
  public
    procedure VisitTConcreteElement(AElement :TConcreteElement);
  end;

implementation

procedure TConcreteVisitor.VisitTConcreteElement(AElement :TConcreteElement);
begin
  { provide implementation here }
end;

end.

und die zweite Einheit für die Geschäftsmodellklassen

unit ConcreteElementUnit;

interface

uses
  VisitorUnit;

type
  TConcreteElement = class(TInterfacedObject, IElement)
  public
    procedure Accept(AVisitor :IVisitor); virtual;
  end;

  Class1 = class(TConcreteElement)
  public
    procedure Accept(AVisitor :IVisitor);
  end;

implementation

{ Class1 }

procedure Class1.Accept(AVisitor: IVisitor);
begin
  AVisitor.VisitTConcreteElement(Self);
end;

end.

Sehen Sie das Problem? Eine kreisförmige Einheitsreferenz. Gibt es eine elegante Lösung? Ich vermute, es erfordert "n + 1" zusätzliche Einheiten mit Basisschnittstellen- / Basisklassendefinitionen, um das CR-Problem zu vermeiden, und Tricks wie harte Würfe?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage