Quando tenho entidades no meu domínio com listas de coisas, elas devem ser expostas como ILists ou IEnumerables? Por exemplo, Order possui um monte de OrderLines.
collections
ienumerable
ilist
pondermatic
fonte
fonte
Respostas:
IEnumerable<T>
representa uma série de itens sobre os quais você pode iterar (usando o foreach, por exemplo), enquanto queIList<T>
é uma coleção à qual você pode adicionar ou remover.Normalmente, você deseja modificar um Pedido adicionando ou removendo OrderLines, e provavelmente deseja que Order.Lines seja um
IList<OrderLine>
.Dito isto, existem algumas decisões de design de estrutura que você deve tomar. Por exemplo, deveria ser possível adicionar a mesma instância do OrderLine a dois pedidos diferentes? Provavelmente não. Portanto, considerando que você deseja validar se um OrderLine deve ser adicionado ao pedido, você pode realmente apresentar a propriedade Lines como apenas um
IEnumerable<OrderLine>
e fornecer os métodos Add (OrderLine) e Remove (OrderLine) que podem manipular essa validação.fonte
IReadOnlyList
ouIReadOnlyCollection
se precisar da lista materializada, mas não deseja adicionar ou remover dela.IReadOnlyList
não faz sentido.Na maioria das vezes, acabo indo com IList sobre IEnumerable porque IEnumerable não possui o método Count e você não pode acessar a coleção por meio de um índice (embora, se você estiver usando o LINQ, possa contornar isso com métodos de extensão).
fonte
ElementAt
método?