Когда у меня есть сущности в моем домене со списками вещей, должны ли они отображаться как ILists или IEnumerables? Например. У заказа есть куча OrderLines.
IList против IEnumerable для коллекций на сущности
Ответ 1
IEnumerable<T>
представляет собой серию элементов, которые вы можете перебирать (используя foreach, например), тогда как IList<T>
- это коллекция, которую вы можете добавить или удалить.
Как правило, вы хотите иметь возможность изменять заказ, добавляя или удаляя OrderLines, поэтому вы, вероятно, хотите, чтобы Order.Lines был IList<OrderLine>
.
Сказав это, вы должны принять некоторые проектные решения каркаса. Например, можно ли добавить один экземпляр OrderLine в два разных порядка? Возможно нет. Поэтому, учитывая, что вы захотите проверить, следует ли добавлять Order Order к порядку, вы действительно можете поместить свойство Lines как только IEnumerable<OrderLine>
и предоставить методы Add (OrderLine) и Remove (OrderLine) который может обрабатывать эту проверку.
Ответ 2
В большинстве случаев я заканчиваю работу с IList над IEnumerable, потому что IEnumerable не имеет метода Count, и вы не можете получить доступ к коллекции через индекс (хотя, если вы используете LINQ, вы можете обойти это с помощью методов расширения).