Pattern dei visitatori e raccolta dei dati visitati

1

Ho alcune operazioni per fare molti più elementi simili. Vorrei raccogliere i dati da ciascun elemento prima e dopo legare tutti i dati a un oggetto (l'associazione è un'operazione costosa quindi devo farlo una sola volta).

È coerente con il pattern Visitor?

Esempio del mio problema:

class Element {
    public $name;

    public function accept(VisitorInterface $visitor) {
        $visitor->visitElement($this);
    }
}

class SimpleVisitor implements VisitorInterface {
    private $data = [];

    public function visitElement(Element $element) {
        $this->data[] = $element->name;
    }

    public function bindData(Object $object) {
        $object->setNames($this->data);
    }
}

$visitor = new SimpleVisitor();
$object = new Object();

$elementA = new Element();
$elementA->name = 'test1';
$elementA->accept($visitor);

$elementB = new Element();
$elementB->name = 'test2';
$elementB->accept($visitor);

$visitor->bindData($object);
    
posta deem 18.01.2017 - 12:49
fonte

1 risposta

2

Secondo me, è coerente. Stai solo implementando il visitatore di stato. Dai un'occhiata a la mia risposta a questo domanda . Ci sono alcune somiglianze qui con il modo in cui stai implementando il visitatore, in termini di inizializzazione del visitatore per primo, e poi invocando altri metodi di quel visitatore.

L'unica cosa che potrebbe essere in qualche modo incoerente con il pattern del visitatore è il metodo bindData. Secondo me, questo non è necessario qui. Hai già il metodo object- > setName. Utilizza questo metodo e esponi il campo di dati per la lettura nella classe SimpleVisitor.

    
risposta data 18.01.2017 - 14:00
fonte

Leggi altre domande sui tag