Ci sono degli svantaggi nell'usare due ascoltatori opposti?

0

In OOP c'è un modello comune di utilizzo di ascoltatori ed eventi.

Recentemente mi sono imbattuto in un'attività in cui due ascoltatori opposti erano stati configurati per realizzare la logica necessaria:

private ValueChanger createValueChanger(UIComponentFactory f) {
    // ValueChanger is some kind of user facing UI component
    ValueChanger comp = f.createValueChanger();
    comp.addChangeListener(changeEvent -> {
        Value newValue = comp.getValue();
        if (!model.getValue().equals(newValue))
            model.setValue(newValue);
    });
    model.addValueChangeListener(newValue -> {
        if (!comp.getValue().equals(newValue))
            comp.setValue(newValue);
    });
}

Sia comp che model eventi di fuoco quando vengono chiamati i metodi setValue corrispondenti.

Tale design è necessario perché comp creato con questo metodo non è l'unico componente che può chiamare model.setValue .

Gli eventuali possibili inconvenienti di un simile approccio in futuro? Forse ci sono altri modi per organizzare la gestione di tali eventi?

    
posta andrybak 30.06.2016 - 17:37
fonte

1 risposta

1

Il codice che descrivi mostra due oggetti che si aggiornano a vicenda in base a un evento. Il rischio di una tale configurazione è che possono entrare in un ciclo infinito dove si aggiornano continuamente l'un l'altro.

Tuttavia sembra che tu abbia risolto questo problema controllando se il valore è stato modificato prima di impostarlo.

  • Oggetto A: il valore è diverso, impostalo.
  • Il nuovo evento si attiva a causa del cambiamento.
  • Oggetto B: il valore è diverso, impostalo.
  • Il nuovo evento si attiva a causa del cambiamento.
  • Oggetto A: il valore è lo stesso, ignoralo. Non attivare l'evento.

Questo sembra essere sicuro per me.

    
risposta data 30.06.2016 - 17:51
fonte

Leggi altre domande sui tag