IList vs IEnumerable pour les Collections sur les Entités
Quand j'ai entités dans mon domaine avec des listes de choses, devraient-ils être exposés comme ILists ou IEnumerables? E. g. L'ordre a un tas de OrderLines.
- Serait-il sage de mettre en œuvre les deux?
- Il ne serait pas. IList hérite de l'interface IEnumerable.
Vous devez vous connecter pour publier un commentaire.
IEnumerable<T>
représente une série d'éléments que vous pouvez parcourir (en utilisant foreach, par exemple), alors queIList<T>
est une collection que vous pouvez ajouter ou à supprimer de.En général, vous aurez envie d'être capable de modifier une Commande en ajoutant ou en supprimant OrderLines à elle, alors vous voudrez probablement de l'Ordre.Lignes à un
IList<OrderLine>
.Cela dit, il y a un certain cadre, les décisions de conception, vous devriez faire. Par exemple, faut-il possible d'ajouter la même instance de OrderLine à deux ordres différents? Probablement pas. Donc, étant donné que vous aurez envie d'être en mesure de valider si une OrderLine doit être ajouté à la commande, vous pouvez en effet de vouloir à la surface les Lignes de propriété comme une
IEnumerable<OrderLine>
, et de fournir des Add(OrderLine) et Supprimer(OrderLine) des méthodes qui peuvent gérer la validation.IReadOnlyList
ouIReadOnlyCollection
si vous avez besoin de la liste matérialisé mais vous ne voulez pas ajouter ou supprimer de il.IReadOnlyList
n'a pas de sens.La plupart du temps je finis par aller avec IList plus de IEnumerable car IEnumerable n'a pas le Comte de la méthode et vous ne pouvez pas accéder à la collection par le biais d'un indice (bien que si vous êtes à l'aide de LINQ vous pouvez contourner ce problème avec les méthodes d'extension).
ElementAt
méthode?