Acho que você pode usar qualquer um, mas cada um tem uma utilidade. Basicamente List
é, IEnumerable
mas você tem a funcionalidade de contagem, adicionar elemento, remover elemento
IEnumerable não é eficiente para contar elementos
Se a coleção se destina a ser somente leitura ou a modificação da coleção é controlada pelo Parent
, retornar um IList
just Count
for não é uma boa ideia.
No Linq, há um Count()
método de extensão no IEnumerable<T>
qual dentro do CLR atalho para .Count
se o tipo subjacente for de IList
, portanto, a diferença de desempenho é insignificante.
Geralmente eu sinto (opinião) que é uma prática melhor retornar IEnumerable onde possível, se você precisar fazer adições, então adicione esses métodos à classe pai, caso contrário, o consumidor está gerenciando a coleção dentro de Model que viola os princípios, por exemplo, manufacturer.Models.Add(model)
viola a lei de demeter. É claro que essas são apenas diretrizes e não regras rígidas e rápidas, mas até que você tenha total compreensão da aplicabilidade, seguir cegamente é melhor do que não seguir de forma alguma.
public interface IManufacturer
{
IEnumerable<Model> Models {get;}
void AddModel(Model model);
}
(Nota: Se estiver usando nNHibernate, você pode precisar mapear para IList privado usando acessores diferentes.)