Я думаю, вы можете использовать и то, и другое, но у каждого есть применение. В основном 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 с использованием разных аксессоров.)