Einzelnen Beitrag anzeigen

RSE

Registriert seit: 26. Mär 2010
254 Beiträge
 
Delphi XE Enterprise
 
#2

AW: MVC - Wie korrekt zweites Fenster instanzieren?

  Alt 9. Aug 2012, 14:25
Ich weiß nicht, ob hier keiner antwortet, weil die Frage zu schwer ist, zu viel zu lesen ist, oder weil ich Google mehr quälen soll...

Ich werfe mal eine Möglichkeit in den Raum, die mir in den Sinn kommt und den Grund, warum ich das nicht einfach so umsetze ohne zu fragen:

Ich habe bereits einiges zur Trennung vom UI und Logik gegoogelt und gelesen, ohne mir im einzelnen aufzuschreiben wo das war. Darunter war auch eine kernige Aussage, die folgende Bedingungen forderte:
  • Die UI darf die konkrete Implementierung der Logik nicht kennen (deshalb nutze ich die abstrakte Klasse TMainIntf als Interfacedefinition)
  • Die UI darf den Controller nicht kennen
  • Die Logik darf weder den Controller noch die UI kennen
  • Der Controller verwaltet alles
Nun fällt mir nur eine Lösung meines Problems ein: Ich gebe der Logik Wissen über den Controller. Damit ist folgendes machbar:
Für die Logik der Projekte gibt es folgende Umsetzung:
Delphi-Quellcode:
  TProjIntf = class(TLogicIntf)
    // Basisklasse für die Logik aller Projekte
  strict protected
    FProjectID: Integer;
    procedure SetProjectID(Value: Integer); virtual;
  public
    property ProjectID: Integer read FProjectID write SetProjectID;
  end;

  TProjXYIntf = class(TProjIntf)
    // abstrakte Basisklasse für die Logik des Projekts XY, welche das Interface für die UI definiert
  end;

  TProjXY = class(TProjXYIntf)
    // konkrete Implementierung der Logik des Projekts XY
  end;
Wenn TMain meint ein Projekt öffnen zu müssen, wird der Controller beauftragt, Objekte für die Logik und die View zu instanzieren. Bei diesem Aufruf wird die Logik-Instanz des Projekts als TProjIntf zurückgegeben. TMain initialisiert nun die ProjektLogik. Nach Abschluss der Initialisierung wird über einen Event der Projektlogik die Projektview angezeigt. TMain ist nun für die Freigabe der ProjektLogik verantwortlich.
Wenn das Projektfenster geschlossen wird, informiert die View des Projekts die Logik. Diese informiert TMain und TMain gibt das Objekt frei und weiß, dass das Fenster geschlossen ist.

Ist das eine sinnige Struktur, oder gibt es da schon wieder zu viele Abhängigkeiten, die aus irgendwelchen Gründen nicht sein sollten?
"Seit er seinen neuen Computer hat, löst er alle seine Probleme, die er vorher nicht hatte."
  Mit Zitat antworten Zitat