Если в моем домене есть объекты со списками вещей, должны ли они быть представлены как ILists или IEnumerables? Например, в Order есть несколько строк OrderLines.
collections
ienumerable
ilist
pondermatic
источник
источник
Ответы:
IEnumerable<T>
представляет серию элементов, которые вы можете перебирать (например, с помощью foreach), тогдаIList<T>
как это коллекция, которую вы можете добавлять или удалять.Как правило, вы хотите иметь возможность изменять Order, добавляя или удаляя к нему OrderLines, так что вы, вероятно, хотите, чтобы Order.Lines были
IList<OrderLine>
.Сказав это, есть некоторые решения по проектированию рамок, которые вы должны принять. Например, можно ли добавить один и тот же экземпляр OrderLine в два разных заказа? Возможно нет. Таким образом, учитывая, что вы захотите проверить, следует ли добавлять OrderLine в заказ, вы действительно можете
IEnumerable<OrderLine>
отобразить свойство Lines только как и предоставить методы Add (OrderLine) и Remove (OrderLine), которые могут обрабатывать эта проверка.источник
IReadOnlyList
или,IReadOnlyCollection
если вам нужен материализованный список, но вы не хотите добавлять или удалять его.IReadOnlyList
нет смысла.Большую часть времени я заканчиваю тем, что использую IList вместо IEnumerable, потому что IEnumerable не имеет метода Count, и вы не можете получить доступ к коллекции через индекс (хотя, если вы используете LINQ, вы можете обойти это с помощью методов расширения).
источник
ElementAt
метода?