Domanda

Sono trovare Ho diversi luoghi che hanno classi statiche interne pubblici progettati che si estendono "helper" classi rende il mio codice molto più sicuro e, a mio parere, leggibile tipo. Per esempio, immaginate ho una classe "SearchCriteria". Ci sono un sacco di punti in comune per le diverse cose che la ricerca di (un termine di ricerca e poi un gruppo di tipi termine di ricerca, un intervallo di date, ecc) Estendendo in una classe interna statica, ho stretto paio l'estensione e la ricercabile classe con le differenze specifiche. Questo sembra come una cattiva idea, in teoria (accoppiamento stretto Bad!), Ma l'estensione è specifico per questa classe ricercabile (una classe, uno scopo).

La mia domanda è, nella vostra esperienza, ha l'uso di classi interne statiche (o qualunque sia la vostra lingua è equivelent) reso il codice più leggibile / mantenibile o ha questo ha finito per mordere nella EOF?

Inoltre, non sono sicuro se questo è materiale comunità wiki o meno.

È stato utile?

Soluzione

Suoni perfettamente ragionevole per me. Rendendo una classe interna, si sta rendendo più facile da trovare e un candidato naturale per la revisione quando cambia la classe ricercabile.

accoppiamento stretto è solo male quando voi le cose coppia che in realtà non appartengono insieme solo perché uno di loro capita di chiamare l'altra. Per le classi che collaborano a stretto contatto, per esempio quando, come nel tuo caso, uno di loro esiste per sostenere l'altro, allora si chiama "coesione", ed è un cosa buona .

Altri suggerimenti

Si noti che la classe non è l'unità di riutilizzo. Di conseguenza, alcuni accoppiamento tra classi è normale e previsto. L'unità di riutilizzo di solito è un insieme di classi correlate.

In Python, abbiamo una varietà di strutture.

  1. Pacchetti. Essi contengono moduli. Queste sono le directory essenzialmente con un po 'di macchine Python gettato in.

  2. Moduli. Essi contengono classi (e funzioni). Si tratta di file; e può contenere qualsiasi numero di classi strettamente correlati. Spesso, il business "classe interna" viene gestita a questo livello.

  3. Corsi. Questi possono contenere definizioni delle classi interne nonché funzioni di metodo. A volte (non molto spesso) possono effettivamente essere utilizzati classi interne. Questo è raro, in quanto l'accoppiamento a livello di modulo tra le classi di solito è perfettamente limpida.

L'unica avvertenza con l'utilizzo di classi interne è fare in modo che non stai ripetendo da soli tutto il luogo - come in - assicuratevi, quando si definisce una classe interna, non stai andando ad avere bisogno di utilizzare tale funzionalità in qualsiasi altro luogo , e che tale funzionalità è necessariamente accoppiato con classe esterna. Tu non vuoi finire con un sacco di classi interne che tutti implementano l'esatto stesso metodo setOrderyByNameDesc().

Il punto di "accoppiamento lasco" è quello di mantenere le due classi separate in modo che se ci sono modifiche al codice nel vostro "SearchCriteria" classe non avrebbe dovuto essere il cambiamento nelle altre classi. Penso che le classi interne statiche si sta parlando potrebbero potenzialmente fare mantenendo il codice di un incubo. Un cambiamento in SearchCriteria potrebbe inviare la ricerca attraverso tutte le classi statiche per capire quali sono ormai rotti a causa dell'aggiornamento. Personalmente, vorrei stare lontano da tali classi interne meno che non sia davvero necessario per qualche motivo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top