Максим Аршинов - Деревья выражений в enterprise-разработке
Ғылым және технология
Ближайшая конференция - DotNext 2024, 10 - 11 сентября, Москва + online
Подробности и билеты: jrg.su/x2GKnA
- -
Один из самых клевых ребят на Хабре в .NET-блоге - его публикации: habr.com/ru/users/marshinov/p...
Для большинства разработчиков использование expression tree ограничивается лямбда-выражениями в LINQ. Зачастую мы вообще не придаем значения тому, как технология работает «под капотом».
Цель доклада - продемонстрировать продвинутые техники работы с деревьями выражений:
- устранение дублирования кода в LINQ;
- метапрограмирование;
- кодогенерация;
- транспиляция;
- автоматизация тестирования.
После доклада вы будете знать, как пользоваться expression tree напрямую, какие подводные камни приготовила технология и как их обойти.
Пікірлер: 10
Большое спасибо за доклад. Очень много полезной информации!
Кажется, код со слайдов не всегда компилируется. В первых же слайдах с кешированием компилированных выражений, где ConcurrentDictionary, непонятно, каким образом у класса Expression появился метод расширения: методы расширения не могут быть объявлены в нестатическом классе или классе-дженерике (тут оба правила нарушены) + не указан this перед первым параметром метода расширения. Сначала подумал, что я чего-то не понимаю, накидал код -- он не работает (
Он какой то программный маньячина )
Все это похоже на изнасилование EF query provider, который и так генерит не понятно какой sql не понятно как, но в целом интересно, автору спасибо
Если есть swagger, то можно использовать nswag для генерации Client на .net standard
Вопрос как приходит правило в контроллер надо дополнить вопросом как оно хранится. Если статически - то все это "служу богу абстракии ради абстракции". А если в DSL где то пользователь текстом вводит и хранит где нибудь в конфиг-табличке -- ну так и построил по этому DSL нужный Expression Tree c предикатом внутри и передал в Where (и никаких spec не надо). Вообще жутко скучно играться со всеми этими сложностями комбинирования "условий" (склейки маленьких expression в большое с перебором параметров), и смотреть на то как играются другие тоже скучно, когда можно просто построить нужный Expression Tree для предиката "с нуля". В прочем знать о такой возможности нужно. Это если я правильно понял о чем лекция в чем уверенности нет. Пересмотрю еще. А за доклад - Спасибо. Было полезно.
Прыжок от "провайдер не может разобрать наш код" к "компилировать это медленно" потерял логическую связку.
5:57 "есть два пакета которые это реализуют..." -- что это? Зачем компиляции делегатов нужен API ? Но за ссылки спасибо. Будем изучать.
Видать совсем скучно мужику на работе. Ну а так интересно, конечно.
Прикреплять валидацию через атрибуты - в рамках функционального программирования на которое настроены мозги программиста работающего с Expression Trees - это как-то неправильно. Валидацию надо встроить явно в поток вычисления.