IList versus IEnumerable para colecciones en entidades

Cuando tengo entidades en mi dominio con listas de cosas, ¿deberían estar expuestas como ILists o IEnumerables? Por ejemplo, Order tiene un montón de OrderLines.

IEnumerable representa una serie de elementos sobre los que puede iterar (utilizando foreach, por ejemplo), mientras que IList es una colección a la que puede agregar o eliminar.

Por lo general, querrá poder modificar un pedido añadiéndole o quitándole OrderLines, por lo que probablemente desee que Order.Lines sea un IList .

Una vez dicho esto, hay algunas decisiones de diseño del marco que debe tomar. Por ejemplo, ¿debería ser posible agregar la misma instancia de OrderLine a dos órdenes diferentes? Probablemente no. Entonces, dado que querrá poder validar si se debe agregar una OrderLine a la orden, es posible que desee IEnumerable la propiedad Lines como solo IEnumerable , y proporcionar Add (OrderLine) y Remove (OrderLine) métodos que pueden manejar esa validación.

La mayoría de las veces termino yendo con IList sobre IEnumerable porque IEnumerable no tiene el método Count y no puedes acceder a la colección a través de un índice (aunque si estás usando LINQ puedes evitar esto con métodos de extensión).