Moin,
die Situation, dass man ein Objekt einer Eigenschaft eines weiteren Objekts zuweist, tritt natürlich häufig ein und daher stellt sich mir oft die Frage nach dem richtigen Design.
Als Beispiel habe ich eine Klasse Clubs und eine Klasse Events gewählt. In einem Club können beliebig viele Events stattfinden. Ich möchte die Events also in einer Eigenschaft der Klasse Club ablegen können, um die Events unter dem jeweiligen Club auflisten zu können.
club.class.php
event.class.php
Der Ablauf sieht momentan so aus, dass ich mir über die Klasse Club_Manager sämtliche Clubs und dann über den Event_Manager die zugehörigen Events auslese und den Clubs hinzufüge.
Jedoch möchte ich für eine Art Kalenderansicht auch eine Auflistung der Events - nicht nach Clubs sortiert, sondern nach dem Datum - ausgeben können.
Dazu lese ich mir dann zuerst die Events aus und hole mir dann den zugehörigen Club, da dieser als Information zum jeweiligen Event angezeigt werden soll.
Man sieht daran schon, dass alleine das Auslesen des Clubs für das jeweilige Event schon ziemlich umständlich - über 2 Manager - passiert. Dies ist der Fall, da die Events ja über eine Club-ID in der Datenbank dem jeweiligen Club zugeordnet sind, die Clubs aber nicht den Events, was auch sinnfrei wäre.
Zuvor hatte ich es noch so gehandhabt, dass ich beim Erzeugen des Eventobjekts die Club-ID gleich mit ausgelesen habe und als Eigenschaft dem Event hinzugefügt habe. Dann würde ich mir den Weg über den Event_Manager sparen, die Club-ID zum Event nachträglich auslesen zu müssen.
Allerdings brauche ich die Club-ID als Eigenschaft dann erstens nur dafür und zweitens nur so lange, bis ich dann schließlich den Club ausgelesen und als Eigenschaft dem Event hinzugefügt habe. Denn dann kann ich die ID ja wieder über den Club selbst abrufen.
Viel Text für eine kurze Frage: Was haltet ihr davon? Ist mein aktueller Ansatz so vernünftig?
Andere Vorschläge und Tipps, wie man es richtig macht, werden gerne genommen.
Viel Spaß
die Situation, dass man ein Objekt einer Eigenschaft eines weiteren Objekts zuweist, tritt natürlich häufig ein und daher stellt sich mir oft die Frage nach dem richtigen Design.
Als Beispiel habe ich eine Klasse Clubs und eine Klasse Events gewählt. In einem Club können beliebig viele Events stattfinden. Ich möchte die Events also in einer Eigenschaft der Klasse Club ablegen können, um die Events unter dem jeweiligen Club auflisten zu können.
club.class.php
PHP-Code:
<?php
class Club {
private $id;
private $name;
// ...
private $events = array(); // Objekte vom Typ Event
public function __construct($id, $name) {
$this->id = $id;
$this->name = $name;
}
public function getId() {
return $this->id;
}
// ...
public function addEvent(Event $event) {
$this->events[] = $event;
}
public function addEvents(array $events) {
foreach ($events as $event) {
if ($event instanceof Event) {
$this->addEvent($event);
}
}
}
public function getEvents() {
return $this->events;
}
}
PHP-Code:
class Event {
private $id;
private $name;
// private $clubID;
private $club; // Objekt vom Typ Club
public function __construct($id, $name) {
$this->id = $id;
$this->name = $name;
}
public function getId() {
return $this->id;
}
// ...
public function setClub(Club $club) {
$this->club = $club;
}
public function getClub() {
return $this->club;
}
}
PHP-Code:
$clubs = $club_manager->getClubs();
foreach ($clubs as $club) {
$events = $event_manager->getEventsByClubId($club->getId());
$club->addEvents($events);
}
Dazu lese ich mir dann zuerst die Events aus und hole mir dann den zugehörigen Club, da dieser als Information zum jeweiligen Event angezeigt werden soll.
PHP-Code:
$events= $event_manager->getEvents();
foreach ($events as $event) {
$club = $club_manager->getClubById($event_manager->getClubId($event->getId()));
$event->addClub($club);
}
Zuvor hatte ich es noch so gehandhabt, dass ich beim Erzeugen des Eventobjekts die Club-ID gleich mit ausgelesen habe und als Eigenschaft dem Event hinzugefügt habe. Dann würde ich mir den Weg über den Event_Manager sparen, die Club-ID zum Event nachträglich auslesen zu müssen.
Allerdings brauche ich die Club-ID als Eigenschaft dann erstens nur dafür und zweitens nur so lange, bis ich dann schließlich den Club ausgelesen und als Eigenschaft dem Event hinzugefügt habe. Denn dann kann ich die ID ja wieder über den Club selbst abrufen.
Viel Text für eine kurze Frage: Was haltet ihr davon? Ist mein aktueller Ansatz so vernünftig?
Andere Vorschläge und Tipps, wie man es richtig macht, werden gerne genommen.
Viel Spaß

Kommentar