Вы когда-нибудь работали с Entity Framework или другим ORM и получали NotSupportedException
? Многие люди получали:
InvalidOperationException: Error generated for warning 'Microsoft.EntityFrameworkCore.Query.QueryClientEvaluationWarning: The LINQ expression could not be translated and will be evaluated locally.'
Марк Симан твердо убежден, что, за одним исключением, все существующие реализации нарушают LSP. Он даже готов отправить бесплатную копию своей книги первому читателю, который укажет ему на реальную, общедоступную реализацию IQueryable<T>
, которая может принять любое выражение и не выбросить исключение. За девять лет книга так и не нашла своего обладателя:)
- Hi Mark,
I am writing a blog post that refers to your artticle. I am wondering if you have ever sent a free copy of your book to someone. Presumably not:)- Hi Maxim
That’s right: I haven’t.
Regards
Mark Seemann
В поддержку этой точки зрения можно привести и другие аргументы. Например, ToListAsync
вообще отсутствует в наборе методов расширения из коробки. Вместо этого он определен в пакетах конкретных ORM. Значит ли это, что не стоит раскрывать IQueryable<T>
в публичных API? Я думаю, что ответ на этот вопрос — «зависит».