mrjerk: Frameworks..

Beitrag lesen

Moin,

Bei deinem Beispiel frage ich mich, warum die Manager-Klasse überhaupt eine param-Methode hat. Warum bietet die Manager-Klasse etwas an, was die CGI-Klasse anbietet?

Im Allgemeinen kann das IMO schon sinnvoll sein, z.b. um die Schichten in einer Applikation voneinander zu trennen, und die konkrete Implementierung der darunter liegenden Klasse vor dem Rest der Applikation zu abstrahieren.

Konkret könnte ich mir bei dem Beispiel einen Manager vorstellen, der beliebige Parameter aus einem Input zurückgeben können soll. Der Manager soll aber nicht wissen, wie das Parsen der Parameter genau implementiert ist, da auf dieser Software-Schicht das Parsen selbst nicht mehr relevant ist - er soll vielmehr in der Lage sein, mittels IRGENDEINEM wie auch immer gearteten Parameter-Parser (in diesem Fall das CGI-Modul) Parameter zu ermitteln.
Ein anderer Parser könnte dann z.b. ein CSV-Parser sein, der die Parameter aus einem Flatfile liest, und auch dieser könnte durch den Manager genutzt werden (sofern er über eine "param"-Methode verfügt).

Vererbung (CGI->Manager) würde dann keinen Sinn machen (denn, wie Du richtig schreibst, müsste dann gelten "JEDER Manager IST ein CGI", was falsch ist (z.b. im Falle des CSV-Parsers).

Für diesen Fall ist es daher durchaus sinnvoll, den Manager als Proxy bzw. Adapter (oder wie auch immer man es bezeichnen will) zu implementieren, der den Aufruf "param" dann an den zuständigen Parser (z.b. CGI) deligiert.

Allerdings, wie dedlfix richtig schrieb: Der Hauptvorteil dieses Entwurfsmusters ist eigentlich, dass der Aufrufer (also hier Manager) die konkrete Implementierung nicht "kennen" muss, und somit komplett von ihr unabhängig ist (was späteres Austauschen der Implementierung wesentlich erleichert), weswegen die Verbindung zwischen Proxy und dem realen Objekt in der Regel auch immer erst zur Laufzeit erzeugt wird (z.b. mittels Dependency Injection.

Wird der CGI-Konstruktor hingegen direkt vom Manager aufgerufen, wie in dem Beispiel, so geht die Unabhängigkeit zwischen CGI und Manager verloren.

These were my 5 cents.

Viele Grüße,
Jörg