AutoMapper - От простого к сложному

Теория и практика | создано: 06.02.2022 | опубликовано: 06.02.2022 | обновлено: 13.01.2024 | просмотров: 3786

Это видео - инструкция по применению фреймворка. Повествование идет от простых вопросов к самым непростым.

AutoMapper: От простого к сложному

Вопросы, ответы на которые озвучены в этом видео перечислены ниже.


Что такое AutoMapper?

AutoMapper — это средство сопоставления одного объекта на другой (в английской терминологии - Mapping). Сопоставление работает путем преобразования входного объекта одного типа в выходной объект другого типа.

Зачем нужен AutoMapper?

AutoMapper — значительно сокращает рутину при написании кода при «копировании» свойств одного объекта в другой объект. А также добавляет точки масштабирования в системе (спорный момент).

Где используется AutoMapper?

AutoMapper обычно используется как «связка» между уровнями UI/Domain (1) или Service/Domain (2). 
Пример 1: Когда объект модели данных должен преобразоваться во ViewModel. 
Пример 2: Когда объект модели данных должен преобразоваться во Data Transfer Object (DTO).

Как работает AutoMapper?

  • AutoMapper сначала конфигурируется (один раз), создаются профили сопоставления (mapping), где описываются настройки и правила.
  • А дальше использование. Вызов метод Map(TDestination, TSource) (или его перегрузки).
  • Полезное: Можно протестировать ваши сопоставления (mappings) выполнив метод AssertConfigurationIsValid()

Возможности AutoMapper

  • Конфигурация может быть как экземпляр (instance) созданный в коде, так и зарегистрированный в Dependency Container.
  • Профили конфигурации (Profile Instances)
  • Сканирование Assembly для авто конфигурирования (Assembly Scanning)
  • Правила именования (Naming Conventions)
  • Подмена символов (Replacing characters)
  • Игнорирование префиксов и постфиксов (Recognizing pre/postfixes)
  • Сопоставление полей (Global property/field filtering)
  • Сопоставление private и internal свойств (Configuring visibility)
  • Компиляция конфигурации (Configuration compilation)
  • Проекция (Projection)
  • Вложенные сопоставления (Nested Mappings)
  • Автоматическая распознание списков  (Lists and Arrays)
  • Конструирование с параметрами (Construction)
  • Упрощение, выравнивание, схлопывание (Flattening)
  • Реверс-схлопывание (Reverse Mapping and Unflattening)
  • Конфигурирование через атрибуты (Attribute Mapping)
  • Динамическое сопоставление (Dynamic and ExpandoObject Mapping)
  • Сопоставление обобщений (Open Generics)
  • Работает с NHibernate or EntityFramework (Queryable Extensions)
  • Пользовательские конвертеры (Custom Type Converters)
  • Пользовательские преобразователи (Custom Type Resolvers)
  • Сопоставления по условию (Conditional Mapping)
  • Предусловия для сопоставления (Preconditions)
  • Подмена NULL (Null Substitution)
  • Конвертеры значений (Value Converters)
  • Разные уровни трансформаций (Globally, Profile, Map, Member)
  • Действия «Перед» и «После» сопоставления (Before and After Map Action)

Производительность и AutoMapper.

Безусловно, дополнительная слой обработки – добавляет миллисекунды, поэтому сопоставление (mapping) в «ручном» режиме – самый производительный способ.

Когда использовать AutoMapper?

  • Я использую: В сложных сопоставлениях для Create и Update операций
  • Я использую: При клонировании объектов
  • Я не использую: для Read операций
  • После тестирования производительности Create и Update операции также могут быть переведены на «ручной» режим сопоставления (mapping)

Альтернативы AutoMapper.

ExpressMapper (‎http://expressmapper.org)
Mapster (https://github.com/MapsterMapper/Mapster) 
MapperGenerator (https://mappinggenerator.net)
AgileMapper (https://agilemapper.readthedocs.io/)

Видео

На видео примеры практического применения разных возможностей.

Исходные тексты

Для подписчиков patreon доступны исходные тексты программы, показанной на видео.

Поблагодарить

Хотите тоже получать донаты? Тогда заходите на boosty.to и регистрируйтесь!

Кстати, я использую хостинг reg.ru. Подключайся с промокодом 9A17-953A-8591-CF98.

Мои видео

Boosty.toYouTube | Yandex.Дзен | RuTube | VK | Nuum.ru