Я думаю, ви можете використовувати будь-яку, але кожна має свою користь. В основному List
це так, IEnumerable
але у вас є функція підрахунку, додавання елемента, видалення елемента
IEnumerable не є ефективним для підрахунку елементів
Якщо колекція призначена лише для читання, або модифікація колекції контролюється Parent
тоді поверненням IList
просто для Count
не є хорошою ідеєю.
У Linq існує Count()
метод розширення, для IEnumerable<T>
якого всередині CLR буде ярлик, .Count
якщо базовий тип має IList
, тож різниця в продуктивності незначна.
Як правило, я вважаю (думка), що кращою практикою є повернення IEnumerable, де це можливо, якщо вам потрібно зробити доповнення, то додайте ці методи до батьківського класу, інакше споживач керує колекцією в рамках Моделі, що порушує принципи, наприклад, manufacturer.Models.Add(model)
порушує закон деметер. Звичайно, це лише рекомендації, а не жорсткі правила, але поки ви не зрозумієте застосовності, сліпо слідувати краще, ніж взагалі не дотримуватися.
public interface IManufacturer
{
IEnumerable<Model> Models {get;}
void AddModel(Model model);
}
(Примітка: Якщо ви використовуєте nNHibernate, можливо, вам доведеться зіставити приватний IList, використовуючи різні засоби доступу.)