Я хотел бы знать, должен ли я определять интерфейс, IQueryable over List для групп объектов. Или, возможно, IEnumerable лучше, поскольку типы IEnumerable могут быть переданы в IQueryable для использования с LINQ.Должен ли я указывать IQueryable over List в моих интерфейсах?
Я изучал курс онлайн, и он имел дело с EntityFramework, для которого лучше всего использовать IQueryable, поскольку LINQ использует его (хорошо, что есть больше, чем это, но, вероятно, не важно сейчас). Использовался код ниже, и мне подумалось, следует ли мне указывать IQueryable вместо List для моих групп объектов.
namespace eManager.Domain
{
public interface IDepartmentDataSource
{
IQueryable<Employee> Employees { get; }
IQueryable<Department> Departments { get; }
}
Если бы я строил интерфейс для сервиса, который вызывает хранилище, чтобы получить сотрудников, я обычно указывают
List <Employees>
, но это лучшая практика? Является ли IQueryable большей гибкостью для классов, реализующих мой интерфейс? Что делать с накладными расходами на импорт LINQ, если они им не нужны (скажем, они хотят только List)? Должен ли я использовать IEnumerable по обоим из них?
Возможно, вы должны пометить свой вопрос «C#», чтобы привлечь больше внимания. – Robert
О, LINQ фактически использует 'IEnumerable' так же легко. Разница заключается в том, хотите ли вы предоставить набор данных, с которыми может работать вызывающий, или прокси-сервер для этих данных. Лично я бы пошел с 'IEnumerable' /' IList', если у вас нет конкретной причины использовать 'IQueryable'. 'IQueryable' делает ваш интерфейс waaaay слишком широким. Сделайте свой интерфейс более жестким, чем «вот все сотрудники, делайте с ними все, что хотите» :) – Luaan
С 'IQueryable' вы возлагаете бремя на разработчика интерфейса. Наложение бремени имеет смысл только в том случае, если есть код, требующий этого интерфейса. Есть ли код, который кричит «Мне действительно нужно« IQueryable »прямо здесь»? – Dialecticus