Hallo,
ich steh grad auf dem Schlauch, glaube ich.
Ich habe eine Klasse, mit der ich konkrete Abfragen auf einen Webservice mache, nennen wir sie mal ZkClient. Die hat im wesentlichen die Methoden
Dann gibt es noch die ModelKlassen Administration, District und Department die in dieser Reihenfolge eine hierarchische Struktur darstellen. D. h. eine Administration enthält mehrere Districts, ein District enthält mehrere Departments.
Daher soll es möglich sein, die enthaltenen Unterobjekte abzurufen, also Administration::getDistricts() und District::getDepartments(). Um diese Informationen abzurufen, muss irgendwann per ZkClient::sendCommand() etwas angefragt werden. Dafür wollte ich jetzt ein Repository bauen.
Das Problem ist, dass alle Abfragen so lazy wie möglich stattfinden. Das heißt, wenn ich aus dem Repository eine Administration hole, werden die zugehörigen Districts noch nicht dort reingefüllt, sondern sollen erst nachgeladen werden, wenn man Administration::getDistricts() aufruft. Somit muss der Klasse Administration zumindest das Repository bekannt sein, oder wäre das eine Design-Schwachstelle? Konkret gefragt: Gibt es eine bessere Lösung als diese hier?
Danke und Gruß,
Amica
ich steh grad auf dem Schlauch, glaube ich.
Ich habe eine Klasse, mit der ich konkrete Abfragen auf einen Webservice mache, nennen wir sie mal ZkClient. Die hat im wesentlichen die Methoden
- DomDocument getEntryDocument()
- string sendCommand (int $actionType, int $uuid, string $data = "")
Dann gibt es noch die ModelKlassen Administration, District und Department die in dieser Reihenfolge eine hierarchische Struktur darstellen. D. h. eine Administration enthält mehrere Districts, ein District enthält mehrere Departments.
Daher soll es möglich sein, die enthaltenen Unterobjekte abzurufen, also Administration::getDistricts() und District::getDepartments(). Um diese Informationen abzurufen, muss irgendwann per ZkClient::sendCommand() etwas angefragt werden. Dafür wollte ich jetzt ein Repository bauen.
Das Problem ist, dass alle Abfragen so lazy wie möglich stattfinden. Das heißt, wenn ich aus dem Repository eine Administration hole, werden die zugehörigen Districts noch nicht dort reingefüllt, sondern sollen erst nachgeladen werden, wenn man Administration::getDistricts() aufruft. Somit muss der Klasse Administration zumindest das Repository bekannt sein, oder wäre das eine Design-Schwachstelle? Konkret gefragt: Gibt es eine bessere Lösung als diese hier?
PHP-Code:
class Administration extends StructuralUnit {
// ...
public function __construct (IRepository $repo) {}
// ...
public function getDistricts () {
return $this->repo->getSubUnitsOf($this);
}
// ...
}
class District extends StructuralUnit {
// ...
public function __construct (IRepository $repo) {}
// ...
public function getDepartments () {
return $this->repo->getSubUnitsOf($this);
}
// ...
}
class Department extends StructuralUnit {
// ...
public function __construct (IRepository $repo) {}
// ...
}
interface IRepository {
public function getSubUnitsOf (StructuralUnit $parentUnit = null);
}
class ZkRepository implements IRepository {
// ...
public function __construct (ZkClient $client) {}
// ...
}
Amica
Kommentar