3 Stimmen

Was ist das beste Entwurfsmuster für PHP, wenn Class_a nur gelegentlich Class_b Informationen benötigt?

Dieses Projekt ist in PHP, aber ist ziemlich Sprache agnostic. Ich baue ein Projekt, das das folgende MVC-Format hat

Main_Class
Main_Class_Common
  --> Class_A
  --> Class_B
  --> Class_C
  --> Class_...
  --> Class_K

Die ursprünglichen Anfragen gehen an die Main_Class, die dann die entsprechende Hauptunterklasse enthält. Die meisten Anfragen müssen nur auf Daten in ihrer eigenen Klasse zugreifen. Es gibt jedoch ein paar wenige klassenübergreifende Daten. Alle Unterklassen benötigen jederzeit Zugriff auf gemeinsame Funktionen in Main_Class_Common.

Zum Beispiel,

Main_Class
Main_Class_Common
  --> Class_Projects
  --> Class_Clients

Normalerweise benötigt Class_Projects nie Daten von Class_Clients, außer in einer Funktion, die es möglicherweise aufrufen muss $class_clients->get_client_details($client_id); und dasselbe geschieht gelegentlich auch in umgekehrter Richtung.

Beide Klassen müssen jedoch in der Lage sein, die $main_class_common->clean_input($myinput); .

Derzeit verwende ich Class class_a extends main_class_common() für den Zugriff auf gemeinsame Funktionen, was perfekt funktioniert. Aber ist der beste Weg, um Klasse_B von Klasse_A zugreifen, um nur die globale $class_b-Variable gelegentlich zugreifen oder sollte ich die möglichen freigegebenen Funktionen in die Main_Class_Common verschieben, auch wenn Sie nur gelegentlich verwendet werden?

Das Projekt befindet sich derzeit noch in der Entwicklungsphase, so dass die derzeitige Implementierung leicht geändert werden kann.

1voto

Niels van der Rest Punkte 30365

El Repository-Muster würde hierher passen. Erstellen einer Class_ProjectRepository Klasse und Class_ClientRepository Klasse, die Methoden wie die folgenden enthalten get_client_details($client_id) .

Die MVC-Controller-Klassen werden die Repositories nutzen. Zum Beispiel werden beide Class_Projects y Class_Clients können die Class_ClientRepository um Kundendaten abzurufen.

Die Repository-Klassen erstellen die Abfrage und rufen Ihr DAL auf. Wenn Sie zusätzlich tatsächliche Domänenobjekte benötigen, wie z. B. Class_Client in Ihrem Controller, sollten Sie die Repositories auch für die Umwandlung der DAL-Ergebnismengen in Domänenobjekte verantwortlich machen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X