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?