Ho un'applicazione swing composta da molti interfacce utente
Queste interfacce estendono una jdialog o un jpanel e implementano ActionListeners. Volevo sapere qual è, secondo voi il modo migliore (in termini di manutenzione e leggibilità di codice) per sviluppare queste classi

Supponiamo di voler realizzare un pannello di opzioni

First solution
Per ogni interfaccia utente realizzo due classi,
La prima classe extends jpanel:

package com.myapp.graphics.OptionPanel (com.myapp.graphics.InfoPanel ecc.. )
public class OptionPanel extends JPanel {
//code
}

La seconda classe implements Actionlisteners:

package com.myapp.listeners.OptionListener (com.myapp.graphics.InfoListener ecc.. )
public class OptionListener implements ActionListeners{
//code
}

Second solution
Realizzo una sola classe che rappresenta il mio pannello di opzioni nel seguente modo:

package com.myapp.gui.OptionMenu
public class OptionMenu extends JPanel implements ActionListeners{
//code
}


Vantaggi della prima soluzione
Tengo separata la logica funzionale dalla rappresentazione grafica,
Svantaggi
Più codice da scrivere perchè devo far dialogare tra loro le due classi e quindi peggior leggibilità del codice


Secondo soluzione
Vantaggi: semplicità nella scrittura del codice da parte del programmatore
Svantaggi: non separo la logica funzionale dall'aspetto grafico


Delle due soluzioni secondo voi qual è la migliore? ci sono altre soluzioni?