0 2.6K ru

Правила использования AutoMapper в .NET

Конфигурация

Используйте инициализировать AutoMapper один раз в Mapper.Initialize в AppDomain startup в устаревшем ASP.NET

Используйте использовать пакет AutoMapper.Extensions.Microsoft.DependencyInjection в ASP.NET Core с services.AddAutoMapper(assembly[])

Х Не используйте CreateMap на каждый запрос

Х Не используйте inline maps

Используйте конфигурацию маппингов в профайле

Рассмотрите организацию классов профайлов близко к типам назначения, которые они настраивают (иными словами в UserProfile должны быть маппинги классов связанных с юзером)

Х Не используйте доступ к статичному Mapper классу внутри профайла

Х Не используйте DI контейнер для регистрации всех профилей

Х Не используйте инджект зависимостей в профайлы

Рассмотрите использование параметров конфигурации поддерживаемых LINQ, по сравнению с параметрами, не поддерживаемыми LINQ

Х Избегайте before/after map конфигурацию

Х Не размещайте логику которая строго не относится к поведению при маппинге данных

Х Не используйте MapFrom, когда элемент и так может быть автоматически смаплен

Х Не используйте AutoMapper, за исключением случаев, когда тип назначения представляет собой уплощенное подмножество свойств типа источника

Х Не используйте AutoMapper для поддержки сложной многоуровневой архитектуры

Х Избегайте использования AutoMapper, когда у вас значительный процент конфигурации прописан в форме Ignore или MapFrom

Моделирование

Используйте не большие DTO

Х Избегайте совмесное использование DTO между маппингами

Необходимо создавать внутренние типы в DTO для типов элементов, которые не могут быть сведены 

Х Не создавайте DTO с "circular" ассоциациями

Х Избегайте изменения имен членов DTO для управления сереализацией

Следует помещать общие простые "computed property" в source модель

Следует помещать "computed property" которые специфичны для dest модели в dest модель

Выполнение

Рассмотрите возможность использования query projection поверх in-memory mapping'a​

Х Не абстрагируйте и не инкапсулируйте mapping за интерфейсом

Необходимо использовать mapping опции для runtime-resolved значений в проекциях.

 Используйте опции mappinga для разрешения контекстуализированных сервисов в in-memory mapping'e

Comments:

Please log in to be able add comments.