Wie baue ich eine Klassenstruktur auf, wenn die Mitglieder auch hierarchisch strukturiert sind?

Ich erstelle eine PHP-Webanwendung, die dem Benutzer die Möglichkeit bieten soll, eine "Installation" / Einrichtung einer (ConnectDirect- oder File Transfer Gateway-) Verbindung zwischen ihm und einer anderen Person / Organisation zu bestellen.

(Die technischen Besonderheiten der Verbindungsimplementierung sind unwichtig - in der Anwendung geht es nur um die Verbindungen als Produkt, die bestellt und verwaltet werden können.)

Die Klassenhierarchie für die Modellebene sollte die folgende reale Infrastruktur darstellen:

Es gibt Verbindungen, das kann bestellt werden.Eine Verbindung kann eine IBM Connect: Direct-Verbindung oder eine IBM File Transfer Gateway-Verbindung sein.A C Verbindung ist direkt von A Quell) bis B Zie).A FTGW Verbindung besteht ausphysikalisc von zwei Verbindungen: A (Quelle) zum FTGW-Server und vom FTGW-Server zu B (Ziel) - aberlogisc (für den bestellenden Benutzer) ist es auch eine Verbindung. (Es gibt zusätzlich einen Fall einer FTGW-Verbindung, die Connect: Direct als Protokoll verwendet.)Jeden endpoint ist entweder eine Quelle oder ein Ziel.

So sehe ich folgende logische Elemente:logical connection, physical connection, Roll (Quell undZie),Verbindungsty, bestelle, endpoint, endpoint type (CD und FTGW).

Die Struktur, die ich derzeit habe, sieht folgendermaßen aus:

Aber es gibt einige Probleme damit:

Es gibtzwei Hierarchiebäume, wo jedesElemen des einen besteht aus enthält Elemente eines bestimmtenTeilmeng des anderen (jede CD-Verbindung besteht aus CD-Endpunkten; jede FTGW-Verbindung besteht aus zwei FTGW-Endpunkten oder genauer: jede logische FTGW-Verbindung besteht aus zwei physischen FTGW-Verbindungen - und jede von ihnen besteht aus einem FTGW-Endpunkt und dem FTGW Server als zweiter Endpunkt).

Eine Alternative könnte sein, die Beziehung zwischen Tweet @ zu ersetzeEndpoint undPsysicalConnection durch zwei Beziehungen:EndpointCD-PsysicalConnectionCD undEndpointFTGW-PsysicalConnectionFTGW.

Prof: Konsistenter; beseitigt die logische Ungenauigkeit (oder vielleicht sogarFehle) der gefälschten Möglichkeit, jede Verbindung (Typ) von einem Paar beliebiger Endpunkte aus aufzubauen. Contra: Eigentlich ist das Erfordernis, zwei Endpunkte zu enthalten, ein Merkmal jeder physischen Verbindung - aus dieser Sicht ist der richtige Ort dafür das grundlegendePsysicalConnection Klasse.

Jeden endpoint kann seinbeid source and target und enthält nicht nur die allgemeinen Endpunkt-Eigenschaften, sondern auchquellen- und zieleigenschaften. Das heißt, abhängig von der aktuellen Rolle des Endpunkts sind einige EigenschaftenAbfal. Und dies wird auch die Datenbankstruktur beeinflussen (Spalten, diemanchma muss gesetzt sein undmanchma muss biNULL).

Eine Alternative ist, die Hierarchie zu erweitern ...

ein. ... nach Klassen wieEndpointSource undEndpoitTarget direkt vom @ erbEndpoint und von den Klassen geerbt werdenEndpointCD undEndpointFTGW (das heißt: zwei identische Teilbäume - unterEndpointSource und unterEndpointTarget);

b. ... nach Klassen wieEndpointCDSource undEndpointCDTarget (Erben von der KlasseEndpointCD) undEndpointFTGWSource undEndpointFTGWTarget (Erben von der KlasseEndpointFTGW) jeweils von den konkreten CD- oder FTGW-Endpunktklassen geerbt werden (das heißt: zweimal zwei identische Teilbäume);

c. ... nach Klassen wieMyConcreteEndpoint***Source undMyConcreteEndpoint***Target Erben von den konkreten Endpunktklassen (dh: jedesMyConcreteEndpoint class wird abstrakt und erhält zwei Sublesses -MyConcreteEndpoint***Source undMyConcreteEndpoint***Target, z.B.EndpointCDLinux ist jetzt abstrakt und wird von @ geerEndpointCDLinuxSource undEndpointCDLinuxTarget).

Prof: beseitigt die Verschwendungseigenschaften. Contra: Eine (komplexere) Klassenhierarchie.

Well, es geht um Softwarearchitektur und sollte (und wird natürlich) meine Designentscheidung sein. Aber es wäre schön, einige Experten- (oder Nicht-Experten-) Gedanken zu hören / zu lesen, wie man mit einem solchen Fall umgeht. Wie lassen sich die logischen Elemente für eine Infrastruktur wie von mir beschrieben ordnen?