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

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

#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 - Забыл показать интересный момент в коде автомаппера

Комментарии

Информация по комментариям в разработке