Hallo,
Ich frage mich was der beste Weg ist um Abhängigkeiten zu definieren die dann ein DIContainer injizieren kann:
1. Konfigurationsdatei
Dependencies Konfigurationsdatei:
Die Abhängigkeiten werden dann über Setter Injections eingeimpft, d.h. im oberen Beispiel würde der Methode setStorage ein Objekt der Klasse ExampleDatabaseClass und setLorem ein Objekt von Ipsum übergeben.
2. Array in Klasse
Im Grunde genommen das exakt gleiche, das Array befindet sich statt in einer externen Konfigurationsdatei direkt im Code der Klasse.
Mehr Möglichkeiten sind mir noch nicht eingefallen, bin aber sicher dass es noch mehr gibt. Welche eignet sich am besten?
Nächste Frage: Wie sollte der DIContainer umgesetzt sein?
1. statische Methode
Macht aber spätistens dann Probleme wenn man noch vor der Erzeugung des Objekts die konfigurierten Abhängigkeiten ändern will. Im Nachhinein würde das natürlich gehen, die Klasse des zurückgegebenen Objekts besitzt ja die Setter-Methoden:
2. eigenes Objekt
Die factory()-Methode dient in diesem Beispiel wieder nur zur Ermöglichung eines Fluent Interfaces, das Objekt wird erst beim Aufruf von create() erstellt, die Abhängigkeiten können so schon vor der Erstellung des Objektes geändert werden.
Hier kann man als Parameter entweder ein Objekt an setStorage() übergeben oder aber die Klasse von der dann wiederum über den DIContainer ein Objekt erzeugt wird.
Bin jetzt hier natürlich für 1. Option für die Definierung und 2. Option für die Erzeugung, mich interessieren aber vorallem weitere, hier nicht aufgezählte Möglichkeiten, mögliche Verbesserungsvorschläge etc.
Freue mich sehr über Antworten: Vielen Dank im Voraus
bitsnack
Ich frage mich was der beste Weg ist um Abhängigkeiten zu definieren die dann ein DIContainer injizieren kann:
1. Konfigurationsdatei
Dependencies Konfigurationsdatei:
PHP-Code:
return array(
'UselessClass' => array(
'storage' => 'ExampleDatabaseClass',
'lorem' => 'Ipsum',
),
);
2. Array in Klasse
Im Grunde genommen das exakt gleiche, das Array befindet sich statt in einer externen Konfigurationsdatei direkt im Code der Klasse.
Mehr Möglichkeiten sind mir noch nicht eingefallen, bin aber sicher dass es noch mehr gibt. Welche eignet sich am besten?
Nächste Frage: Wie sollte der DIContainer umgesetzt sein?
1. statische Methode
PHP-Code:
Container::create('UselessClass');
PHP-Code:
Container::create('UselessClass')->setStorage(new ExampleFileClass());
PHP-Code:
Container::factory('UselessClass')->setStorage('ExampleFileClass')->create();
Container::factory('UselessClass')->setStorage(new ExampleFileClass())->create();
Hier kann man als Parameter entweder ein Objekt an setStorage() übergeben oder aber die Klasse von der dann wiederum über den DIContainer ein Objekt erzeugt wird.
Bin jetzt hier natürlich für 1. Option für die Definierung und 2. Option für die Erzeugung, mich interessieren aber vorallem weitere, hier nicht aufgezählte Möglichkeiten, mögliche Verbesserungsvorschläge etc.
Freue mich sehr über Antworten: Vielen Dank im Voraus
bitsnack
Kommentar