AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Problem mit eigener Architektur: Zirkulärer Unit-Bezug...
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit eigener Architektur: Zirkulärer Unit-Bezug...

Ein Thema von Ares · begonnen am 30. Okt 2007 · letzter Beitrag vom 30. Okt 2007
 
Ares

Registriert seit: 5. Dez 2002
269 Beiträge
 
#1

Problem mit eigener Architektur: Zirkulärer Unit-Bezug...

  Alt 30. Okt 2007, 11:48
Hallo!

Ich bastel gerade an dem Grundgerüst eines neuen Programms. Man könnte es vielleicht Architektur nennen, aber ganz so ausgereift ist es noch nicht. Die Idee ist, dass ich im Prinzip die verschiedenen Aufgaben im Programmfluss auf verschiedene Klassen aufteile.

Hierbei gibt es eine Hierachie mit zwei Stufen:
Auf obersten Stufe arbeitet der ProgramManager, dieser verwaltet einige globale Werte und zudem verschiedene SubManager die Teilaufgaben erledigen. So kümmert sich z.B. der OptionsManager darum, dass die Optionen ausgelesen, geändert, geschrieben, etc. werden.

Der ProgrammManager erstellt und kontrolliert die SubManager. Das Problem: Geleichzeitig sollen die SubManager auf die globalen Werte des ProgrammManagers zugreifen können. Deswegen muss die Unit des ProgrammManagers die Units der SubManager referenzieren und umgekehrt. Dies für zu einem zirkulären Bezug:

Delphi-Quellcode:
Unit_A
...
uses Unit_B; // Notwendig für TOptionsManager...

type
  TProgrammManager = class(TObject)
  private
    FOptionsManager: TOptionsManager;
    FRegistryPfad: String;
  public
    constructor Create;
    RegistryPfad: String read FRegistryPfad;
  end;
...
constructor TProgrammManager.Create;
begin
  FRegistryPfad := '\Ein\Pfad\in\der\Registry\';

  // SubManager "OptionsManager" erstellen und verwenden
  FOptionsManager := TOptionsManager.Create;
  FOptionsManager.LiesOptionen;
end;
Delphi-Quellcode:
Unit B
...
uses Unit_A; // Notwendig für TProgrammManager ...

type
  TOptionsManager= class(TObject)
  private
    FParrent: TProgrammManager;
  public
    constructor Create(aParrent: TProgrammManager);
    procedure LiesOptionen;
  end;
...
constructor TOptionsManager.Create(aParrent: TProgrammManager);
begin
  // SubManager mit ProgrammManager Parrent erstellen
  FParrent := aParrent;
end;

procedure TOptionsManager.LiesOptionen;
begin
  // Mit globalen Werten des ProgrammManager arbeiten
  OpenRegistryPath(FParrent.RegistryPfad);
  ...
end;

Ich finde die Konstruktion eigentlich recht gut, nur leider funktioniert das Ganze wegen dem zirkulären Unit-Bezug nicht. Habt Ihr eine Idee wie ich dieses Problem umgehen kann?

Besten Dank
Ares
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz