Якщо у мене є об'єкти в моєму домені зі списками речей, чи слід їх виставляти як ILIST або IEnumerables? Наприклад, замовлення має купу OrderLines.
Якщо у мене є об'єкти в моєму домені зі списками речей, чи слід їх виставляти як ILIST або IEnumerables? Наприклад, замовлення має купу OrderLines.
Відповіді:
IEnumerable<T>
представляє серію предметів, які ви можете повторити (наприклад, використовуючи foreach), тоді IList<T>
як це колекція, яку ви можете додати або видалити з неї.
Зазвичай ви хочете мати змогу змінювати замовлення, додаючи до нього або видаляючи OrderLines, тому ви, ймовірно, хочете, щоб Order.Lines був an IList<OrderLine>
.
Сказавши це, вам слід прийняти деякі рамкові дизайнерські рішення. Наприклад, чи має бути можливість додати один і той же екземпляр OrderLine до двох різних замовлень? Напевно, ні. Отже, враховуючи, що ви хочете мати змогу перевірити, чи слід до замовлення додавати OrderLine, ви, можливо, захочете повернути властивість Lines лише як IEnumerable<OrderLine>
і надати методи Add (OrderLine) та Remove (OrderLine), які можуть обробляти що перевірка.
IReadOnlyList
або, IReadOnlyCollection
якщо вам потрібен, матеріалізований, але ви не хочете його додавати чи видаляти.
IReadOnlyList
немає сенсу.
Більшу частину часу я закінчую з IList над IEnumerable, тому що в IEnumerable немає методу Count, і ви не можете отримати доступ до колекції через індекс (хоча якщо ви використовуєте LINQ, ви можете обійти це за допомогою методів розширення).
ElementAt
методом?