Incapsula il downcasting quando si torna da un metodo

1

Nel capitolo 24 del Codice Completo l'autore dice, in riferimento all'incapsulamento del downcasting al ritorno da un metodo, "Se una routine restituisce un oggetto, normalmente dovrebbe restituire il tipo più specifico di oggetto di cui è a conoscenza. Questo è particolarmente applicabile alle routine che restituiscono iteratori, raccolte, elementi di raccolte e così via. "

Ora, essendo un programmatore C #, in genere restituisco sempre ICollection invece di, ad esempio, IList o persino List. Usando un'interfaccia da più in alto nella gerarchia, sono libero di cambiare tipo di raccolta nel metodo senza interrompere l'interfaccia del metodo. Questa sembra una buona cosa. Cosa mi manca?

    
posta user1323245 23.07.2013 - 07:55
fonte

1 risposta

2

Si tratta di valutare i vantaggi per te stesso , l'autore della libreria e i vantaggi per altri , i programmatori dell'applicazione.

Pubblicare un tipo generale ti lascia libero di cambiare idea in seguito senza violare il contratto, ma allo stesso tempo svaluta il contratto stesso . Se si restituisce una raccolta generica, l'utente non può fare nulla con esso, tranne enumerarlo. Se è tutto ciò che è necessario, bene. Ma se l'utente ha effettivamente bisogno di un ordine ben definito degli elementi restituiti, un Collection non è sufficiente. In un mondo perfetto, ogni programmatore applicativo lo riconoscerebbe e si asterrebbe dal dipendere dall'ordine in cui gli elementi vengono restituiti. Tuttavia (sai dove sta andando ...), nel mondo reale, ciò che probabilmente accadrà è che dichiari i tuoi risultati come Collection , ma li implementa tramite una specie di List , e i tuoi utenti osservano un ordine prevedibile di elementi e arrivare a dipendere da esso. Quindi quando cambi l'implementazione, i loro programmi si interrompono e ti maledicono. Se ti sei impegnato a generare un List in primo luogo, questo non può accadere.

Ecco perché è una buona idea impegnarsi almeno a qualche livello di struttura dati specifica nelle interfacce pubbliche. In realtà è abbastanza raro che tu cambi idea se una struttura dati consentirà duplicati o se consentirà null , o se debba essere ordinato o meno, quindi decisioni come scegliere List su Set aren È così difficile da realizzare e danno ai tuoi utenti più garanzie su cui lavorare (piuttosto che assumere falsamente le cose che sono vere adesso ma potrebbero cambiare senza preavviso).

    
risposta data 23.07.2013 - 08:09
fonte

Leggi altre domande sui tag