Meu probleminha é o seguinte, estou refatorando meu código de GUI em pequenos componentes reusaveis, a dúvida é sobre como fazer o wiring entre os vários componentes.
Via de regra tenho um objeto com todo o glue code para um caso de uso, ou seja, instancia e configura os componentes GUI. A questão é que a maioria deles costumam espor 1-2 valores e depender de outros. O pepino disso é que as fontes e os destinos desses desses valores mudam muito.
Hoje minha solução envolve os componentes implementarem PropertyChangeListener e um mediador adicionar eles para escutar notificações pertinentes. Um problema disso é que eu trato os eventos de acordo com o tipo da propriedade que mudou, isso meio que cheira mal, o outro é que os componentes tem que estar preparados para receber os eventos.
Ou seja, o código hoje parece +/- com:
Mediador...
void createComposite() {
a = new ComponenteA();
b = new ComponenteB();
a.addPropertyChangeListener("X", b);
}
ComponenteA...
void setX(IJavaElement x) {
int oldX = this.x;
this.x = x;
support.firePropertyChange("X", oldX, x);
}
ComponenteB...
void propertyChange(PropertyChangeEvent evt) {
if(isPropertyOfType(evt, IJavaElement.class))
setJavaElement((IJavaElement)evt.getNewValue());
}
Funciona mas fico na dúvida se não seria melhor fazer algo +/- assim:
Mediador...
void createComposite() {
a = new ComponenteA();
b = new ComponenteB();
bind(a, "X", b, "javaElement");
}
void bind(IPropertySouce a, String source, Object b, String dest) {
Object listener = EventHandler.create(PropertyChangeListener.class, b, dest, "newValue");
a.addPropertyChangeListener(source, (PropertyChangeListener)listener);
}
A idéia é que o Mediador que se vire para entregar o valor ao componente b. Oque tou achando de ruim nisso é que usar composição de componentes fique mais complexo

