2012-06-25 7 views
5

Ese título es un poco complicado ... Cuando escribo una interfaz, ¿es una buena práctica devolver la interfaz más específica posible o la menos?OO mejor práctica con respecto a la devolución de una interfaz menos específica al devolver una interfaz

Por ejemplo, supongamos

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

sería mejor cambiarlo a

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

de manera que las personas que llaman pueden llamar getRange en su resultado, sin dejar de juego Lista polimórfica?

Respuesta

2

Si el código está cambiando mucho (por lo general, mientras aún está en desarrollo), devolvería la interfaz más específica y la ampliaría cuando fuera necesario. De esta forma, recomienda que la interfaz no se use con demasiada frecuencia, y es más fácil cambiar las cosas si decide eliminar o cambiar radicalmente la interfaz más adelante.

Si el código es estable, o es parte de una API que se publicará, devolvería la interfaz más amplia, para que sea utilizable para la mayor audiencia.

+1

Devolver el tipo más específico le proporciona la mayor audiencia. Cualquiera que quiera IEnumerable puede consumir IList, pero no al revés, así que no entiendo por qué uno querría ampliar el tipo de devolución más tarde. – mayu

Cuestiones relacionadas