Во-первых, я не считаю этот вопрос дублированием этих SO-вопросов:
Должен ли я всегда возвращать IEnumerable ‹T› вместо IList ‹T›? и IEnumerable ‹T› в качестве возвращаемого типа
Как мы все знаем, одной из основных целей введения нескольких уровней является уменьшение связи.
Мы должны определить некоторый интерфейс для доступа к данным, и наш BL не должен заботиться о деталях реализации DAL. Если упомянутый интерфейс возвращает IEnumerable<T>
BL не знает, является ли это просто статическим IEnumerable
или чем-то, что имеет отложенное выполнение. В то же время эта конкретная деталь может значительно повлиять на производительность и требует разного кодирования в зависимости от реализации.
Ну, можно вызывать .ToList()
для каждого IEnumerable
в ситуациях, когда мы собираемся повторять сборку несколько раз. Но это снижает производительность статических коллекций из-за ненужного создания экземпляров нового списка.
Итак, я пытаюсь понять, какой подход лучше.
Более универсальный и потенциально менее производительный, чем более связанный, более производительный. Думаю, серебряной пули нет, но могут быть и другие подходы, которые я пропустил.
IReadOnlyList<T>
. - person svick   schedule 28.01.2013