2012-06-25 22 views
5

Dieser Titel ist ein wenig schwierig ... Wenn ich eine Schnittstelle schreibe, ist es in der Regel bewährte Methode, die am meisten spezifische Schnittstelle, oder am wenigsten?OO Best Practice in Bezug auf die Rückgabe weniger/spezifischer Schnittstelle bei der Rückgabe einer Schnittstelle

Angenommen,

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

Wäre es besser, es

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

so dass Anrufer auf ihrem Ergebnis getRange zu

ändern aufrufen können, während immer noch Liste passender polymorph?

Antwort

2

Wenn sich der Code stark ändert (normalerweise während der Entwicklung), würde ich die spezifischste Schnittstelle zurückgeben und sie erweitern, wenn weitere Anforderungen benötigt werden. Auf diese Weise ermutigen Sie, dass die Schnittstelle nicht zu oft verwendet wird, und es ist einfacher, Dinge zu ändern, wenn Sie sich entscheiden, die Schnittstelle später zu entfernen oder radikal zu ändern.

Wenn der Code stabil ist, oder Teil einer API veröffentlicht werden soll, würde ich die breiteste Schnittstelle zurückgeben, um es für die größte Zielgruppe nutzbar zu machen.

+1

Die Rückkehr der spezifischsten Art gibt Ihnen die größte Zuhörerschaft. Jeder, der IEnumerable möchte, kann IList konsumieren, aber nicht umgekehrt. Daher verstehe ich nicht, warum man den Rückgabetyp später erweitern möchte. – mayu

Verwandte Themen