Einzelnen Beitrag anzeigen

Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.009 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#18

AW: Entkoppeln von Forms

  Alt 14. Sep 2017, 23:04
Hi Steve,

danke für die Hinweise. Ich lerne immer gern dazu - wie könnte das (in Spring4D?) aussehen?

BTW: Ich fand gerade diese TCreateFormFunction charmant, weil so beliebige Konstruktoren möglich sind.
Wir nutzen die typischen TComponent Konstruktoren bei uns in der Anwendung fast gar nicht, wenn man interfaced Forms und Frames hat, braucht man keinen Owner.
Daher kann man nun Konstruktoren bauen, die alle ihre Abhängigkeiten injektet bekommen.

Gut, im Beispiel hatte ich halt nur die typischen Aufrufe des standard TComponent.Create gesehen.

Das muss ja nicht so sein. Die Factory kann ja rein gegeben werden oder ein Merkmal anhand dessen das zu erzeugende Formular identifiziert wird. Die konkrete Implementierung ist ja von der konkreten Aufgabe abhängig. Außerdem binde ich mir doch die Hände, wenn ich das Form bzw. dessen Klasse übergebe.
Beispiel: FormA ist eine Maske die mir ein Suchergebnis, ein Grid anzeigt. Außerdem gibt es eine Combobox in der Tabellen stehen (Kunden, Lieferanten, Artikel etc.) und ein Button. Beim Buttonklick wird ein FormB zum Filtern der Daten geöffnet. Wurde mir das FormB von außen vorgegeben, bleibt mir keine Wahl. Über eine Factory, die ja auch ein generisches Fallback bereithalten kann, besteht die Möglichkeit auf die Benutzereingaben zu reagieren und z.B. eine Kundensuchmaske anzuzeigen.

Bei "Logikendpunkten" ist das keine Frage (alle Benutzereingaben verarbeitet => Datenklasse.Export(Exportklasse)). Aber ein Form in ein Form zu injizieren klingt nach Einschränkung und nach vorgelagerter Logik. Nach Funktionalität die aus der Klasse, in die sie Gehört, rausgeholt wurde.
Du vermischt hier zwei Dinge:
1. es braucht keine Entscheidung getroffen werden -> die konkrete Abhängigkeit wird injektet. Hierbei ist die entscheidung bei der Komposition des Objektgraph im Komposition Root getroffen worden.
2. es wird anhand von Benutzereingaben eine Entscheidung getroffen, ob ich A oder B brauche. Entweder wurden mir A und B injektet oder die entsprechenden Factories bzw Lazy von A oder B um sie bei bedarf erst zu bekommen. Das Teil, was mir dann aber A oder B oder C gibt, kann mir nur A,B oder C geben und sollte deshalb nich einfach die Wundertüte Namens ServiceLocator, FormFactory oder sonstwas allgemeines sein. Denn das öffnet Tür und Tor, sich da einfach was raus zu angeln, was man nicht erwartet - einfach mal nach Misko Hevery Service Locator googeln und die Session schauen (englisch)
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie (14. Sep 2017 um 23:06 Uhr)
  Mit Zitat antworten Zitat