Время от времени я встречаю людей, пытающихся выразить API в терминах IQueryable<T>
. Почти всегда это плохая идея. В этой статье я объясню почему. В кратце, IQueryable<T>
— это один из лучших примеров заголовочного интерфейса (Header Interface), предлагаемых платформой .NET. Его почти невозможно реализовать полностью.
Эта статья о проблемах реализации API на основе интерфейса
IQueryable<T>
. Это не претензия к интерфейсу как таковому. Кроме этого, это не претензия к замечательным методам LINQ, доступным для интерфейсаIEnumerable<T>
.
Можно сказать, что IQueryable<T>
— это одно сплошное нарушение принципа подстановки Лисков. Я буду использовать закон Постела, чтобы объяснить почему это так.
Принцип устойчивости, также известен как закон Постела в честь Джона Постела: «Будь либерален к тому, что принимаешь, и консервативен к тому, что отсылаешь (Be liberal in what you accept, and conservative in what you send)».