Dovrei creare qui la classe interiore o andarmene così com'è?

2

Gente, ho due classi separate. Uno di questi effettua richieste http / riceve risposta da / a un server e il secondo converte oggetti JSON ricevuti nei miei modelli (classi separate). Penso che sarebbe un'idea includere questa classe per la conversione dei dati come classe interna della mia prima classe. La mia prima lezione non sarebbe grande in più per questo e ho bisogno di lasciare tutto com'è o questa è una buona pratica comune comportarsi così?

    
posta Eugene 12.01.2011 - 20:35
fonte

3 risposte

3

Le classi interne sono più comunemente usate per oggetti che agiscono direttamente sulla classe che li include. Un eccellente esempio di questo è iteratori. Crei un'implementazione personalizzata di Iterator all'interno della tua classe contenitore e ne restituisci un'istanza nel getIterator() o in qualsiasi metodo. Questo iteratore ha accesso a tutti i metodi e i campi di quel contenitore, che possono rendere più semplice l'implementazione di remove() , ad esempio. Inoltre, l'iteratore è unico per quella classe, ma è un'implementazione di un'interfaccia pubblica esterna, quindi ha senso che sia nascosto come una classe interiore.

Vorrei applicare queste domande al tuo esempio. Se la risposta a qualcuno di questi è no, consiglierei di fare in modo che la classe sia indipendente.

  1. È unico per la tua classe? Cioè, qualsiasi altra classe può utilizzare questo convertitore?
  2. Ha bisogno di accedere ai campi privati della classe che li include?
  3. È un'implementazione personalizzata di un'interfaccia pubblica esistente a cui non si dovrebbe mai accedere in alcun modo se non attraverso quell'interfaccia? Se è così, non ha davvero senso renderlo una classe pubblica di sua proprietà. Come nell'esempio di Iterator, puoi restituire l'interfaccia senza alcun accenno alla struttura sottostante. Buona incapsulamento.

Penso che il tuo esempio fallisca con il numero 2 e probabilmente anche con il numero 1, poiché opera su dati non specifici della classe di chiusura. Non conosco il terzo; informazioni insufficienti. Non lo farei una classe interiore. Se vuoi davvero limitare l'accesso alla classe, rendi il pacchetto privato (dichiarato con class , non public class ) - quindi è possibile accedervi solo all'interno del pacchetto.

    
risposta data 12.01.2011 - 20:48
fonte
1

Se le complicazioni dovessero complicare troppo le cose senza apportare miglioramenti significativi da qualche parte (tempo di esecuzione, ecc.) allora non penso che ne valga la pena e lo lascerebbero così com'è.

    
risposta data 12.01.2011 - 20:44
fonte
1

Sembra che stiano facendo due cose completamente indipendenti. Quindi dovrebbero essere classi indipendenti.

    
risposta data 12.01.2011 - 20:46
fonte

Leggi altre domande sui tag