根据情况显示用户信息?

时间:2017-09-07 17:40:44

标签: php oop

我收到了User的对象account_type

还有一个类Menu,它显示了类型帐户的菜单项:

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];
    }

}

因此,我按$typeAccount从数组中获取所有菜单项。

它看起来很糟糕且不可扩展,你能推荐更多的OOP实现吗?

1 个答案:

答案 0 :(得分:1)

由于模型包含数据,因此无法扩展。因此,如果您想添加或更改与不同帐户类型相关联的菜单,您必须更改应用程序代码。

您需要在一些外部数据源中存储定义不同菜单的数据 - 配置文件,数据库,最适合您的数据。

当您从代码中删除数据时,您可以拥有一个仅负责菜单的菜单类。您可以传递它所需的所有数据,以便成为其构造函数的特定类型的菜单。

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
}

您可以创建另一个提供外部数据源访问权限的类,并且有一个方法可以根据给定的帐户类型创建Menu对象。

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);
    }

}

具体实现取决于您,这个示例对您来说可能甚至没有用。但在我看来,主要观点是您的应用程序代码不是存储动态数据的正确位置。