Перейти к содержимому

Как сделать свой AutoMapper с нуля | На Reflection | На Expression Tree | На Source Generators

Dev Jungles - Andrii Podkolzin

0:00 / 0:00

Как сделать свой AutoMapper с нуля | На Reflection | На Expression Tree | На Source Generators

8 425 просмотров · Трансляция закончилась 3 г. назад
Dev Jungles - Andrii Podkolzin
15,4 тыс. подписчиков
8 425 просмотров · Трансляция закончилась 3 г. назад
#DevJungles #dotnet #expressions Mappers - это такой класс библиотек, что помогает нам преобразовывать объекты, прокидывая их между слоями абстракции. Говорят, что без них или асбтракции текут или много кода писать приходится. Это не лишено правды. В любом случае, если Вы здесь, то скорее всего знаете зачем нужны мапперы, такие как AutoMapper и Mapster. Потому здесь будет не об этом. Дело в том, что мапперы сами по себе устроены довольно интересно, более того инструмментарий метапрогрммирования в .NET такой большой, что у нас сразу несколько способов их сделать со своими преимуществами и надостатками и это тоже повод поговорить об этом. В этом стриме мы построим не один клон AutoMapper, а сразу несколько используя разные подходы: на Reflection, на ExpressionTrees, на SourceGenerators, а может и другие. Смотреть его стоит для того что бы: Узнать больше о возможностях кодогенерации и рефлексии в .NET Увидеть решения ряда проблем, возникающих при кодогенерации Лучше разобраться с функциями мапперов и понять почему они сделаны именно так. Telegram канал Dev Jungles - https://t.me/DevJungles Поддержать канал можно: Спонсорством на YouTube Переводом на карту или пополнением банки монобанка: Dev Jungles YouTube Channel Fund https://send.monobank.ua/jar/7iAP3sZkm9 Номер карты банки: 5375 4112 0230 1466 Или криптой: Binance Id: 479881646 BTC - 18C3jsFYwviN5FvzpAt4uMWRfUeVKvdWxy ETH - 0x2903f63ba9009732272e91a299053b9d7b623216 USDT on ERC20 - 0x2903f63ba9009732272e91a299053b9d7b623216 USDT on TRC20 - TSmS5RzQKbWdxZkoM2oRo9HK8FYBaq744T LTC - LN3CkrnvZLZTXDUhqTy1gUKMVpLjEPA4G2 Таймкоды 0:00 - Введение 8:30 - Начало с пустого проекта ==========Reflection========== 12:30 - Самый медленный вариант с рефлексией 19:30 - Простой маппинг готов, но какие могут быть проблемы (для чего рекурсивный маппинг?) 21:40 - Решение проблем (делаем маппинг рекурсивным) 30:00 - Придумываем модель конфигурации 37:50 - Начинаем кодить конфигурацию (прописывать интерфейсы) 49:25 - Начинаем кодить билдеры конфигураций 1:00:00 - Учим наш маппер работать с конфигурацией 1:10:00 - Делаем маппинг коллекций 1:34:30 - Решаем проблему маппинга рекордов ==========Expression Tree========== 1:49:20 - Можем переходить к экспрешн маппингу (что получим от этого решения?) 1:51:55 - Разбор бенчмарка, что быстрее Expression, FastExpression, Baseline и т.д., как менялось это в разных версиях .net (почему Expression - лучший вариант на данный момент) 2:11:10 - Возвращаемся к нашим баранам (Пробуем делать маппер на Expression) ==========Source Generators========== 2:46:10 - Маппер на Source Generators (в начале про мапстер) 2:53:00 - Еще одна идея альтернативного автомапера 2:56:50 - Как делаются генераторы 3:31:00 - Unsafe для маппинга 3:19:00 - Выводы 3:23:00 - Забыл показать интересный момент в коде автомаппера