Quando si lavora con programmi Java basati sull'interfaccia utente, un modo per attaccare il comportamento a determinate azioni (ad esempio per fare clic su un pulsante) è attraverso l'uso di classi anonime. Nell'esempio seguente, la struttura della GUI è SWT, tuttavia ho gli stessi problemi con i componenti dell'interfaccia utente di Swing o Android. Vale a dire la strutturazione dei miei programmi.
MenuItem sampleMenuItem = new MenuItem(popupMenu, SWT.NONE);
sampleMenuItem.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
doSomething();
// handle all table entries
for (int i=0; i<10; i++) {
doSomething2();
}
doSomething3();
doSomething4();
}
});
Naturalmente, alcuni potrebbero obiettare che la quantità di codice nell'esempio sopra già giustifica la creazione di una classe dedicata che contiene la logica. Questo è anche suggerito da di Sonar "Le classi anonime non dovrebbero avere troppe righe" regola.
È interessante notare che questa regola specifica anche che:
squid : S1188 - While waiting for support of closure in Java, anonymous classes is the most convenient way to inject a behavior without having to create a dedicated class. But those anonymous inner classes should be used only if the behavior can be accomplished in a few lines. With more complex code, a named class is called for.
Tuttavia, poiché le chiusure non sono ancora arrivate in Java, la mia domanda è se ci sono soluzioni più eleganti di :
- scrivere un mucchio di codice all'interno di classi anonime che ha tutti i tipi di inconvenienti (riutilizzo limitato, navigazione più lenta attraverso il codice, ...)
- creando un numero enorme di classi dedicate che a loro volta potrebbero avere funzionalità molto limitate (cioè: over-engineering, ...)
Per estendere la mia domanda: mi piacerebbe anche sapere quali sono le migliori pratiche in merito a questo aspetto delle applicazioni UI basate su Java? Ci sono dei modelli ben stabiliti?