viernes, 2 de diciembre de 2011

IEnumerable en vez de List para propiedades

Hoy toca un post muy sencillo y básico pero que puedes preguntarte en algunas ocasiones.

Hoy le he hecho una pregunta a mi amigo y maestro Pedro Santos que me estaba rondando por la cabeza, ¿por qué exponer una propiedad como IEnumerable en vez de List, si yo internamente la voy a definir como una List?

Su respuesta ha sido muy clarificadora:

Al exponerla como IEnumerable tu no expones (encapsulas) su estructura interna, además así limitas las operaciones a realizar con esta propiedad y puedes aplicar las reglas de negocio que te interesen, como por ejemplo, que tenga un cierto comportamiento concreto al añadir un nuevo elemento a la lista.

Si tu expones una propiedad como List, también le estas exponiendo la opción de añadir sin que tu controles como se han de añadir estos elementos a tu colección.

Pues bueno, a partir de ahora, todas mis colecciones irán como IEnumerable y cuando me interese le expondré el método AddNewFooItem(FooItem item). Por último, lo ideal también sería exponer el setter de la lista como private o protected, para que no puedan “settearte” una nueva colección.