Cuando se trabaja con programas Java basados en la interfaz de usuario, una forma de asociar el comportamiento a ciertas acciones (por ejemplo, al hacer clic en un botón) es mediante el uso de clases anónimas. En el ejemplo a continuación, el marco de la GUI es SWT, sin embargo, tengo los mismos problemas con los componentes Swing o Android UI. A saber, la estructuración de mis programas.
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();
}
});
Por supuesto, algunos podrían argumentar que la cantidad de código en el ejemplo anterior ya garantiza la creación de una clase dedicada que contenga la lógica. Esto también lo sugiere la regla "Las clases anónimas de Sonar no deberían tener demasiadas líneas" .
Curiosamente, esta regla también especifica que:
calamar: S1188 - Mientras se espera el soporte de cierre en Java, las clases anónimas son la forma más conveniente de inyectar un comportamiento sin tener que crear una clase dedicada. Pero esas clases internas anónimas deben usarse solo si el comportamiento se puede lograr en unas pocas líneas. Con un código más complejo, se requiere una clase con nombre.
Sin embargo, dado que los cierres aún no han llegado a Java, mi pregunta es si hay soluciones más elegantes que :
- escribir un montón de código dentro de clases anónimas que tiene todo tipo de inconvenientes (reutilización limitada, navegación más lenta a través del código, ...)
- creando una gran cantidad de clases dedicadas que todas ellas podrían tener una funcionalidad muy limitada (es decir: sobre ingeniería, ...)
Para ampliar mi pregunta: también me gustaría saber cuáles son las mejores prácticas con respecto a este aspecto de las aplicaciones de IU basadas en Java. ¿Hay algún patrón bien establecido?