2012-06-25 5 views
5

Questo titolo è un po 'complicato ... Quando scrivo un'interfaccia, è generalmente consigliabile restituire l'interfaccia più specifica possibile o meno?OO best practice per restituire un'interfaccia meno specifica quando si restituisce un'interfaccia

Per esempio, supponiamo

interface List2<T> extends List<T> 
{ 
    List<T> getRange(int startIndex, int endIndex); 
} 

sarebbe meglio cambiarlo a

interface List2<T> extends List<T> 
{ 
    List2<T> getRange(int startIndex, int endIndex); 
} 

modo che i chiamanti possono chiamare getRange sul loro risultato, pur corrispondenza Lista polimorfico?

risposta

2

Se il codice sta cambiando molto (di solito mentre è ancora in fase di sviluppo), restituirei l'interfaccia più specifica e renderla più ampia quando ulteriori esigenze lo richiedessero. In questo modo, incorpori che l'interfaccia non venga utilizzata troppo spesso ed è più facile cambiare le cose se decidi di rimuovere o cambiare radicalmente l'interfaccia in un secondo momento.

Se il codice è stabile o parte di un'API da pubblicare, restituirei l'interfaccia più ampia, per renderlo utilizzabile per il pubblico più vasto.

+1

Il ritorno del tipo più specifico offre il maggior numero di spettatori. Chiunque desideri IEnumerable può consumare IList, ma non viceversa, quindi non capisco perché uno vorrebbe ampliare il tipo di reso più tardi. – mayu