Lorsque j'ai des entités dans mon domaine avec des listes de choses, doivent-elles être exposées comme ILists ou IEnumerables ? Par exemple, Order a un tas de OrderLines.
Réponses
Trop de publicités?IEnumerable<T>
représente une série d'éléments sur lesquels vous pouvez itérer (en utilisant foreach, par exemple), alors que IList<T>
est une collection à laquelle vous pouvez ajouter ou retirer des éléments.
Typiquement, vous voudrez être capable de modifier une commande en ajoutant ou en supprimant des lignes de commande, donc vous voudrez probablement que Order.Lines soit un fichier de type IList<OrderLine>
.
Cela dit, vous devez prendre certaines décisions concernant la conception du cadre. Par exemple, doit-il être possible d'ajouter la même instance de OrderLine à deux commandes différentes ? Probablement pas. Donc, étant donné que vous souhaitez être en mesure de valider si une OrderLine doit être ajoutée à la commande, vous pouvez en effet vouloir faire apparaître la propriété Lines comme une simple propriété IEnumerable<OrderLine>
et fournir des méthodes Add(OrderLine) et Remove(OrderLine) qui peuvent gérer cette validation.