我有一个类,用于生成嵌套的无序 html 列表。
class cTree {
function cTree(){
}
public function getTree($id = NULL ){
}
private function addSubNode($iParentId, $iLevel){
}
其中 addSubnode 是一个递归函数来获得正确的嵌套。
现在,我想在我的网站上有两个导航菜单。两个无序列表,但标记不同。
在我看来,有 3 个选项:
将一个额外的变量传递给 getTree() 和 addSubNode(),然后使用 if/else 结构。我不喜欢这样,因为它不可维护。
向类中添加两个额外的函数,因此我将拥有例如 getTopTree()/getFooterTree 和 addTopSubNode()/addFooterSubNode();
创建两个新类(cTopMenu 类扩展 cTree / cFooterMenu 类扩展 cTree)并根据我的喜好编辑 getTree/addSubNode。
如前所述,我不喜欢第一个选项,但不确定第二个和第三个。最好的设计选择是什么?
额外的例子,使情况更清楚。它与上面的不一样,但绝对可以比较。我有一棵用于导航的树:
<ul>
<li><a href="/x">Item 1 </a></li>
<li><a href="/x">Item 2 </a></li>
<li><a href="/x">Item 3 </a></li>
</ul>
然后我有另一个,带有管理选项:
<form method="post">
<ul>
<li>
<input type="text" value="Item 1" />
<input type="checkbox" value="1" id="visible_1" name="visible[]">
<label for="visible_1"> visible</label>
</li>
<li>
<input type="text" value="Item 2" />
<input type="checkbox" value="1" id="visible_2" name="visible[]">
<label for="visible_2"> visible</label>
</li>
<li>
<input type="text" value="Item 3" />
<input type="checkbox" value="1" id="visible_3" name="visible[]">
<label for="visible_3"> visible</label>
</li>
</ul>
</form>
基本上是同一棵树。现在我扩展了基本的树类,替换了 getTree() 和 addSubNode() 函数。