Es ist nicht skalierbar, da das Modell Daten enthält. Wenn Sie also Menüs hinzufügen oder ändern möchten, die mit verschiedenen Kontotypen verknüpft sind, müssen Sie Ihren Anwendungscode ändern.
Sie müssen stattdessen die Daten speichern, die die verschiedenen Menüs in einer externen Datenquelle definieren - eine Konfigurationsdatei, eine Datenbank, was auch immer für Sie am besten funktioniert.
Wenn Sie die Daten aus Ihrem Code entfernen, können Sie eine Menü-Klasse erstellen, die nur dafür verantwortlich ist, ein Menü zu sein. Sie können alle Daten übergeben, die für einen bestimmten Menütyp für den Konstruktor erforderlich sind.
class Menu {
private $menu_items;
function __construct($menu_items)
{
$this->menu_items = $menu_items;
// set other menu properties as needed
}
// various methods related to being a menu
}
Sie können eine andere Klasse, die den Zugriff auf Ihre externe Datenquelle bereitstellt, und verfügt über eine Methode, die Menüobjekte basierend auf einem bestimmten Kontotyp erstellt.
class MenuRepository {
private $data_source;
public function __construct($data_source) {
$this->data_source = $data_source;
}
public function getMenuItemsForAccountType($typeAccount)
{
$menu_items = $this->data_source->someQuery($typeAccount);
return new Menu($menu_items);
}
}
Die spezifische Implementierung liegt wirklich an Ihnen, und dieses Beispiel ist vielleicht nicht einmal so nützlich für Sie. Aber der Hauptpunkt ist meiner Meinung nach, dass Ihr Anwendungscode nicht der richtige Ort ist, um dynamische Daten zu speichern.
Hat die Menu-Klasse neben 'getMenu' noch andere Methoden, die andere menübezogene Dinge tun, oder ist es im Grunde nur ein Wrapper um das Array von Menüs? –
Ja, ich habe es behoben Fehler – user3573738
Menü hat zusätzliche Parameter wie: groupId, URL, Titel. Es ist nicht wichtig – user3573738