2012-06-25 9 views
5

Ten tytuł jest trochę trudny ... Kiedy piszę interfejs, czy ogólnie najlepszą metodą jest zwrócenie najbardziej konkretnego interfejsu, czy może najmniejszego?Dobra praktyka OO dotycząca zwracania mniej/bardziej specyficznego interfejsu podczas zwracania interfejsu

Na przykład, załóżmy

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

Byłoby lepiej, aby zmienić

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

tak aby dzwoniący mogą wywołać getRange na ich wynik, a jednocześnie dopasowując Lista polimorficznie?

Odpowiedz

2

Jeśli kod zmienia się bardzo często (zazwyczaj w trakcie opracowywania), zwrócę najbardziej szczegółowy interfejs i sprawię, że będzie szerszy, gdy będą mu potrzebne dalsze potrzeby. W ten sposób zachęcasz, aby interfejs nie był używany zbyt często i łatwiej jest zmieniać rzeczy, jeśli zdecydujesz się na późniejsze usunięcie lub radykalną zmianę interfejsu.

Jeśli kod jest stabilny lub część interfejsu API ma zostać opublikowana, zwrócę najszerszy interfejs, aby był dostępny dla największej publiczności.

+1

Zwrócenie najbardziej konkretnego typu daje największą widownię. Każdy, kto chce IEnumerable, może zużywać ILista, ale nie na odwrót, więc nie rozumiem, dlaczego chciałbym później rozszerzyć typ zwrotu. – mayu

Powiązane problemy