AutoMapper - От простого к сложному
Теория и практика | создано: 06.02.2022 | опубликовано: 06.02.2022 | обновлено: 13.01.2024 | просмотров: 4660
Это видео - инструкция по применению фреймворка. Повествование идет от простых вопросов к самым непростым.
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 доступны исходные тексты программы, показанной на видео.