2017-09-07 3 views
1

Ich habe ein Objekt User bekommen, das account_type abgelegt hat.Benutzerinformationen je nach Zustand anzeigen?

Auch ist es eine Klasse Menu, das Konto Menüpunkte zeigt je nach Typ:

class Menu { 

    private $menu = []; 

    public function __construct(){ 
     $this->menu = [1 => [1 => "Menu1", 2=> "Menu2" ], 2=> [1=> "Menu3"]] 
    } 

    public function getMenu($typeAccount){ 
     return $this->menu[$typeAccount]; 
    } 

} 

Also, ich hole alle Menüpunkte aus dem Array von $typeAccount.

Es sieht schrecklich aus und ist nicht skalierbar, können Sie mehr OOP-Realisation empfehlen?

+0

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? –

+0

Ja, ich habe es behoben Fehler – user3573738

+0

Menü hat zusätzliche Parameter wie: groupId, URL, Titel. Es ist nicht wichtig – user3573738

Antwort

1

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.

Verwandte Themen