Hallo allerseits,
ich habe mal eine Frage an die nicht-java-gurus hier

Es geht um Klassen (Services) welche per XML konfiguriert werden können.
Dazu muss man eine Möglichkeit haben die Konfigurationsdaten (Properties) in diese Klassen einzufügen.
Des weiteren sollen diese Services auch Abhängigkeiten zu anderen Services haben dürfen.
Kleines anschauliches Beispiel:
Service DatabaseConnection: // repräsentiert eine Anbindung an eine Datenbank
Property: connectionURL
Service Irgendwas: // Irgendein Service der Zugriff auf eine Datenbank benötigt.
Dependency: DatabaseConnection
Diese werden so konfiguriert:
Code:
<service name="db" class="DatabaseConnection">
<property name="connectionURL" url="mysql://localhost/blablubb" />
</service>
<service name="foo" class="Irgendwas">
<dependency value="db" /> // verwende den obigen service mit dem namen db
</service>
Alles ganz schick soweit, aber das Problem ist das folgende:
Wie werden diese Properties/Dependencies an die Services übergeben?
In Java weit verbreitet ist Setter Injection (Ich probiere den Code mal nach php umzusetzen):
Code:
class Irgendwas
{
private $db;
function setDatabaseConnection($db)
{
$this->db = $db;
}
//usw für jede Dependency bzw Property eine Set Methode.
}
Oder auch verbreitet: Constructor Injection. Hier werden alle Properties und Dependencies dem Konstruktor übergeben.
Code:
class Irgendwas
{
private $db;
function __construct($db)
{
$this->db = $db;
}
}
Und zuletzt das ganze in klassischer form:
Code:
class Irgendwas
{
private $db;
function __construct($config)
{
$this->db = $config->getDependency("DatabaseConnection");
}
}
Nun da stehe ich und weiß nicht welche der Techniken ich verwenden soll.
Die letzte Methode ist auf jeden Fall die simpelste und auch intuitivste, da man beim Schreiben eines Service keinerlei Vorgaben im Hinterkopf haben muss und man sich alle Properties/Dependencies per Hand holt.
Aber
ich würde gerne wissen inwieweit die ersten beiden Techniken für nicht-java Entwickler nachvollziehbar sind. Da diese erhebliche Vorteile mit sich bringen, ich aber dennoch das Framework so simpel wie möglich halten möchte.
Ich würde mich freuen wenn sich jemand den Roman hier durchlesen könnte ;D
Danke
xardie