关于这个问题的背景;我们构建了以下数据结构(示例)
Book
- Table of Contents
- Chapter
- Chapter Title
- Pages
- Paragraphs
- Page Number
该结构使用Composite模式构建;我们还在数据库表中有数据(文本元数据和媒体信息),这些数据由访问者分配给树中的每个对象。
现在的想法是我要验证结构;但这必须从叶节点开始完成;
即。验证页面是否有段落和页码来验证页面;如果是这样,那么章节可以被验证,等等。
我正处于绑定状态,因为访问者模式从数据结构中抽象出算法;因此,不可能将返回值直接添加到我用来遍历树的方法中;并且添加另一种做同样工作的方法毫无意义;这是CompositeObject上允许访问者遍历树的方法:
/**
* Accept Visitor
* @param ObjectTree_Visitor_Interface $visitor
* @return void
*/
public function acceptVisitor(ObjectTree_Visitor_Interface $visitor) {
$visitor->visit($this);
if(count($this->objects) > 0) {
foreach($this->objects as $object) {
$object->acceptVisitor($visitor);
}
}
}
关于我可以用来遍历这种结构的替代方法的任何想法?