我收到了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实现吗?
答案 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);
}
}
具体实现取决于您,这个示例对您来说可能甚至没有用。但在我看来,主要观点是您的应用程序代码不是存储动态数据的正确位置。