Ci sono degli svantaggi nell'usare una classe nidificata invece di dichiararne una nuova?

3

Sto facendo una revisione del codice su un cambiamento che il mio collaboratore ha apportato alla nostra applicazione Java, e ho trovato qualcosa che non mi è molto familiare: una classe annidata.

Dalla revisione del codice, sembra che la classe nidificata sia utilizzata come se fosse una normale classe e chiedendo al mio collega di farlo, la ragione per inserirla come classe nidificata è dovuta a un controllo del codice sorgente problema che le impediva di creare una nuova classe il giorno in cui l'aveva codificata.

Questo mi dà fastidio - anche se non c'è motivo di introdurre questo elemento nel nostro codice (pochissime classi usano classi annidate nella nostra applicazione), non c'è alcun svantaggio a cui io possa pensare. La classe nidificata è, in un modo molto allentato, correlata alla classe da cui proviene, e riscrivendo il codice in modo che la classe nidificata sia indipendente, impiegherebbe del tempo.

C'è qualche buona ragione per fare in modo che il mio collega riduca il codice in modo che questa classe annidata sia indipendente? O dovrei semplicemente chiedere loro di sprecare il loro tempo in qualcosa che non ha importanza?

Si noti che non sembra esserci alcun effetto funzionale sull'implementazione della classe in questo modo - quindi qualsiasi argomento dovrebbe provenire da best practice o da una cattiva struttura, piuttosto che provare a dimostrare che non funziona (perché lo fa lavoro - non sono sicuro che sia appropriato).

    
posta Zibbobz 09.11.2018 - 17:32
fonte

3 risposte

2

Se la classe nidificata è privata, fa parte dei dettagli di implementazione di quella classe. Ci sono varie valide ragioni per cui una tale classe potrebbe esistere: incapsulamento dei dati, dimostrando un'implementazione privata di un'interfaccia per nominarne due.

Se la classe è accessibile al di fuori della sua classe contenente, allora probabilmente entra in gioco il principio di responsabilità singola. Questa classe interiore è veramente una responsabilità di quella esteriore? Dal momento che dici che è solo vagamente correlato, allora la risposta è probabile, no.

Le classi di nidificazione le accoppiano strettamente. Rende la classe esterna più complessa poiché ora contiene funzionalità di due classi. E quella classe esterna ha ora due responsabilità. E tutto questo esiste a causa di un problema con un check-in.

Quindi raccomando di ristrutturare il codice in questo caso, sposta anche quella classe interna nel suo file in cui appartiene.

    
risposta data 09.11.2018 - 18:11
fonte
1

Dato che è stato creato solo a causa di un problema con il controllo del codice sorgente più di qualsiasi altra considerazione di progettazione, allora sì. Probabilmente dovresti refactarlo.

Tuttavia, se il codice è funzionale e non hai una regola di stile di codifica "senza classi nidificate", non ti consigliamo di non eseguire la revisione del codice a causa di esso.

    
risposta data 09.11.2018 - 17:57
fonte
1

Sono obbligato a pubblicare questo fumetto sulla misura della qualità del codice.

Se l'unica ragione per la creazione della classe nidificata anziché di una classe indipendente era una restrizione clericale [il controllo del codice sorgente è un impiegato automatizzato], la classe nidificata dovrebbe essere riformulata in una classe indipendente. Se non ci sono altri motivi, questo dovrebbe essere un facile refactoring.

    
risposta data 09.11.2018 - 18:05
fonte