PDA

View Full Version : [JAVA] Dubbio su come evitare GUI "hard-coded"


duald
07-07-2012, 16:24
Salve a tutti.
Sto realizzando un programma con interfaccie grafiche, e mi chiedevo come evitare hard-coded. In particolare voglio evitare di impostare la proprieta Text dei Component direttamente dal codice.
La scelta è ricaduta sui file properties, così colgo l'occasione anche di rendere il programma i18n.
Il dubbio che mi sorge è come implementare la classe :
1 - definisco un interfaccia
public interface I_TextGUI{
public static final int MAIN = 0;
...
public String[] getEtichetette(int whichGUI);
}

che viene estesa dalla classe :
public class TextGUIProperties1 implements I_TextGUI{ }

2 - creare solo la classe
public class TextGUIProperties2 {
public static final int MAIN = 0;
...
public static String[] getEtichetette(int whichGUI){}
}

La soluzione 1 favorisce il riuso (forse ... spero) se la fonte dati dovesse cambiare; lo svantaggio è che ogni view deve avere un riferimento ad un oggetto della classe TextGUIProperties1 che opera allo stesso modo è che non ha stato.
Soluzione 2 l'esatto opposto.
Un possibile compromesso penso che sia la definizione di una classe di Utility
public class Utility{
private static I_TextGUI textGUI;

public static I_TextGUI getTextGUI(){ return textGUI;}

public static void setTextGUI(I_TextGUI textGUI){
Utility.textGUI = textGUI;
}
..//eventuali altri metodi
}
dove I_TextGUI viene impostato nel main.
Però questa soluzione mi sembra che tende ad una proliferazione delle classi.
Come vedete sono un pò confuso, spero in un vostro aiuto.

duald
09-07-2012, 13:35
La mia scelta è ricaduta sull'opzione 2 (classe con metodo statico). Convinto di aver fatto la scelta più sensata oggi vado dal prof per esternare altri dubbi (l'applicazione è un progetto didattico) e con l'occasione gli ho esposto il dilemma di prima (maledetto a me che l'ho fatto)... l'unica risposta che ho avuto è "valuta la scelta migliore, ma stia attento ai principi OO dunque anche al riuso". Ho provato a vedere situazioni simili su internet ma non ho trovato niente che potesse aiutarmi.

wizard1993
09-07-2012, 14:36
anche io solitamente opto per la seconda versione.
Anche se, al posto delle properties, in caso il programma abbia usi un db preferisco farmi una tabella apposta.

demos88
10-07-2012, 16:01
edit

duald
11-07-2012, 13:36
Grazie per la risposta.
E come giudichi l'idea della classe Utility (eventualmente con blocco synchronized)?

Un possibile compromesso penso che sia la definizione di una classe di Utility
public class Utility{
private static I_TextGUI textGUI;

public static I_TextGUI getTextGUI(){ return textGUI;}

public static void setTextGUI(I_TextGUI textGUI){
Utility.textGUI = textGUI;
}

Riesce a superare i limiti di entrambe le scelte.

Inoltre, dopo una richiesta da parte di una view, cosa faccio con i dati caricati (cioè etichette) ?? Li mantengo in una struttura utile per le chiamate successive, così da evitare (ad una futura richiesta) una nuova lettura da file (simile Proxy)?? O no??