验证对象树中的组件(从叶子遍历)

时间:2013-06-25 17:35:41

标签: php composite tree-traversal visitor-pattern

关于这个问题的背景;我们构建了以下数据结构(示例)

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

关于我可以用来遍历这种结构的替代方法的任何想法?

0 个答案:

没有答案