我目前正在尝试将我们的页面模板转换为OOP,我觉得我为导航类提出的内容并不完全正确。
drawNav
的扩展类?getMenuBar
- > generateMenuBar
- > generateMenuItems
结构过多崩溃?它应该只是getMenuBar
,并将generateMenuBar()
和generateMenuItems()
中的所有内容都放入getMenuBar()
吗?我称之为班级和方法的方式:
$drawNav = new drawNav();
$breadcrumbTrail = $drawNav->getBreadcrumbTrail();
$menuBar = $drawNav->getMenuBar();
代码:
class drawNav {
public function __construct() {
//I’ve not nothing to put here…
}
public function getMenuBar()
{
return $this->generateMenuBar();
}
public function getBreadcrumbTrail()
{
return $this->generateBreadcrumbTrail();
}
public function getSocialMediaButtons()
{
return $this->generateSocialMediaButtons();
}
private function generateSocialMediaButtons()
{
//return the HTML code with the social media buttons
}
private function generateMenuBar()
{
//Generate the HTML containing the menu and social media buttons
$this->generateMenuItems();
$this->getSocialMediaButtons();
//Generate the HTML closing tags for the container for the menu and social media buttons
}
private function generateMenuItems()
{
//Call to the database and generate each individual menu item and its dropdown
}
private function generateBreadcrumbTrail()
{
//Generate the HTML containing the breadcrumb trail
$this->generateBreadcrumbs();
//Generate the HTML closing tags for the container for the breadcrumbtrail
}
private function generateBreadcrumbs()
{
//Call to the database and generate the pieces of the breadcrumb trail
}
}
答案 0 :(得分:6)
是
getMenuBar
- >generateMenuBar
- >generateMenuItems
结构过多崩溃?
是。绝对没有理由对包含私有方法的单行公共方法进行一对一的映射。这不是任何人的最佳OOP实践清单。
而不是这种古怪:
public function getSocialMediaButtons()
{
return $this->generateSocialMediaButtons();
}
// ...
private function generateSocialMediaButtons()
{
//return the HTML code with the social media buttons
}
你应该这样做:
public function getSocialMediaButtons()
{
//return the HTML code with the social media buttons
}
如果您担心能够在公共界面中混合并匹配私有方法,那么以后很容易重构。但编写单行公共方法,其唯一目的是使用几乎完全相同的名称来调用私有方法,这是一个巨大的代码味道。
否则,您的代码很好,但有一点需要注意:我希望您“使用社交媒体按钮返回HTML代码”会呈现一些外部HTML模板文件,并且您不是在内部编写HTML内联内容。后端/前端逻辑的良好分离比代码部分的结构更重要;我宁愿看到程序代码干净地分离业务/视图逻辑,而不是精心设计的面向对象的代码,它们将它们混合在一起。
答案 1 :(得分:1)
我真的没有看到你如何分离方法的大问题。我个人宁愿让类方法处理一些特定的操作,然后使用其他方法将“构建块”方法组合成更复杂的操作。例如,如果您需要更改breadcrumb数据库逻辑,那么只需要在那个方法中更改它,并且该方法从其他方法中抽象出来,以便不需要更改它们。
答案 2 :(得分:0)
你所拥有的一切似乎很好。
我会怀疑你是否有一个Navigation类,因为这可以全部添加到其中,或者作为Navigation类的扩展,以保持清洁。