Lorsque j'ai des entités dans mon domaine avec des listes de choses, devraient-elles être exposées comme ILists ou IEnumerables? Par exemple. L'ordre a un tas de lignes de commande.IList vs IEnumerable pour les collections sur les entités
Répondre
IEnumerable<T>
représente une série d'éléments que vous pouvez parcourir (en utilisant foreach, par exemple), tandis que IList<T>
est une collection que vous pouvez ajouter ou supprimer.
En règle générale, vous souhaiterez pouvoir modifier un ordre en y ajoutant ou en supprimant des lignes de commande. Par conséquent, vous souhaiterez probablement que les lignes de commande soient IList<OrderLine>
. Cela dit, il y a certaines décisions de conception de cadre que vous devriez prendre. Par exemple, devrait-il être possible d'ajouter la même instance de OrderLine à deux ordres différents? Probablement pas. Donc, étant donné que vous voudrez être en mesure de valider si un OrderLine doit être ajouté à la commande, vous voudrez peut-être faire apparaître la propriété Lines comme un IEnumerable<OrderLine>
, et fournir des méthodes Add (OrderLine) et Remove (OrderLine) qui peuvent gérer cette validation.
La plupart du temps, je termine avec IList sur IEnumerable car IEnumerable n'a pas la méthode Count et vous ne pouvez pas accéder à la collection via un index (bien que si vous utilisez LINQ vous pouvez contourner cela avec l'extension méthodes).
Je crois que vous pouvez toujours instancier une implémentation IList avec le IEnumerable si vous avez besoin d'accéder à la méthode de comptage et comme par exemple: IEnumerable
IEnumerable
"vous ne pouvez pas accéder à la collection via un index" - qu'en est-il de la méthode 'ElementAt'? – ivamax9
Serait-il sage d'implémenter les deux? – PedroC88
Ce ne serait pas. Un IList hérite de IEnumerable. – Unknown1987