2013-07-29 15 views
7

Questo è inteso come una sorta di domanda generale, ma prima darò il mio problema specifico:java - Quante classi sono troppe? Quando è opportuno aggiungere nuove classi?

Sto scrivendo una GUI per il mio programma al momento per un programma che prenderà la forma di una cornice collocato su vari widget (etichette, campi di testo, ecc.). Inizialmente userà la libreria javax.swing, ma sto facendo uno strato di astrazione tra la libreria e la stessa GUI per rendere più facile la creazione di un'applicazione web che faccia la stessa cosa.

Mi piacerebbe avere una classe che rappresenta il layout della GUI: vale a dire, dovrebbe contenere tutte le informazioni su dove le varie etichette, pulsanti, ecc. Sono posizionati nel riquadro del contenuto. Al momento, l'applicazione che sto considerando è la seguente:

class Layout 
{ 
    public MyLabel titleLabel; 
    public myTextField sequenceTextField; 
    [...] 

    public void drawTitleLabel() 
    { 
    titleLabel = new MyLabel("This is the title."); 
    titleLabel.setLocation(wherever); 
    titleLabel.draw(); 
    } 

    public void drawSequenceTextField() 
    { 
    sequenceTextField = new MyTextField(); 
    [...] 
    sequenceTextField.draw(); 
    } 

    [...] 

    public void drawGuiFrame() 
    { 
    drawTitleLabel(); 
    drawSequenceTextField(); 
    [...] 
    } 
} 

Così ho dichiarare ogni widget sul riquadro del contenuto come un campo della classe Layout, e quindi creare metodi drawWidgetName che disegnano ciascun widget. Infine, creo un metodo che chiama ciascuno dei metodi draw... per disegnare l'intera GUI.

Questo sembra sbagliato, però. I metodi draw... si sentono come se dovessero essere i metodi dei singoli widget stessi, non del layout su larga scala dell'intera GUI. Ciò suggerisce che dovrei creare classi separate TitleLabel, SequenceTextField, ognuna con un metodo draw e quindi avere solo un metodo nella classe Layout che chiama tutti questi metodi draw (potrei anche creare una classe astratta che queste nuove classi potrebbe estendersi).

Ci sarebbero alcuni altri vantaggi immediati a questo. Supponiamo che volessi incorporare un sistema di checkbox nonché le mie etichette e aree di testo. Quindi potrei dichiararlo come una classe e assegnargli le proprietà isOptionA, isOptionB ecc. Per registrare quale casella di spunta è stata selezionata.

Ma sono leggermente riluttante ad implementare la GUI in questo modo, per due ragioni. In primo luogo, la creazione di così tante nuove classi ingombra il codebase con molti piccoli file .java. In secondo luogo, si tratterebbe di classi molto "monouso": non utilizzerei mai più il codice, poiché le classi verrebbero progettate esclusivamente per questa particolare GUI.

Quindi, quante classi sono troppe? È corretto creare molte nuove classi che verranno utilizzate una volta solo perché ritieni che siano le classi? Come ho detto, anche se accolgo con favore consigli specifici a questo particolare problema, sto anche cercando indicazioni più generali su quando è opportuno aggiungere nuove classi.

+4

Se vuoi meno lezioni prova una lingua diversa. – Kevin

+2

Questo sembra essere l'approccio corretto in Java. –

+1

Non c'è un modo giusto ma molti modi sbagliati. Per ora, non essere ansioso per questo - quando acquisisci esperienza otterrai un "feeling" per il problema. –

risposta

8

Avere classi separate sembra un approccio corretto per me. Organizzate le classi nei pacchetti , moduli e sottomoduli in modo che non dovessero realmente "ingombrare il codice base". Una grande applicazione in java può facilmente avere un sacco di classi che potrebbero essere utilizzate solo da quella singola applicazione. Questo è più o meno il modo in cui Java è un linguaggio e l'ecosistema java nel suo complesso funziona.

In java, di solito si considera che il layout di classe più granulare è, meglio è.

+0

Grazie per la risposta. Sarebbe opportuno annidare le classi all'interno di una classe più grande se vengono utilizzate una sola volta o potrebbero rendere la classe troppo grande? –

+0

@ Donkey_2009 dipende. In alcuni casi d'uso è appropriato. – eis

3

Mi piace creare una classe per ogni nuovo concetto introdotto. Di solito una classe può essere arbitrariamente lunga, specialmente se si utilizzano molti dati hardcoded.Dovrai fare attenzione agli oggetti divini http://en.wikipedia.org/wiki/God_object.

Se qualche classe ha troppa logica in esso, diventa molto più difficile da leggere. Se ritieni che una classe stia diventando troppo grande, verifica se nella classe esiste una logica che potrebbe avere una sua classe.

Problemi correlati