AutoMapper — це бібліотека для .NET, яка спрощує передачу даних між об'єктами (mapping). Зокрема, коли потрібно перетворити дані з одного об'єкта в інший, AutoMapper автоматизує цей процес, що робить ваш код більш чистим і легким у супроводі.
Кроки використання AutoMapper:
1- Додавання AutoMapper до проєкту: Першим кроком є додавання AutoMapper через NuGet. Можна використовувати наступну команду.
Install-Package AutoMapper
2- Налаштування маппінгу між об'єктами (Mapping): AutoMapper дозволяє визначити відносини між джерелом і цільовим об'єктом. Це налаштування можна зробити в класі Profile.
Наприклад, якщо ми хочемо перетворити об'єкт Product в об'єкт ProductDTO:
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
}
public class ProductDTO
{
public int Id { get; set; }
public string Name { get; set; }
}
public class MappingProfile : Profile
{
public MappingProfile()
{
CreateMap<Product, ProductDTO>();
}
}
3- Ініціалізація AutoMapper: Для запуску AutoMapper використовується MapperConfiguration. Це можна додати в файл Startup.cs або Program.cs:
var configuration = new MapperConfiguration(cfg => {
cfg.AddProfile<MappingProfile>();
});
IMapper mapper = configuration.CreateMapper();
4- Процес маппінгу: Для перетворення об'єктів можна використовувати інтерфейс IMapper.
var product = new Product { Id = 1, Name = "Product1", Price = 100.0M };
var productDTO = mapper.Map<ProductDTO>(product);
Кращі практики використання:
- Здійснюйте перетворення тільки за потребою: Хоча AutoMapper є потужним інструментом, не рекомендується виконувати маппінг для кожного об'єкта без потреби.
- Використання Profile: Створення окремого класу Profile для кожного типу перетворення допомагає зробити код більш структурованим та модульним. Особливо для великих проєктів корисно використовувати різні Profile для різних шарів (API, Service, DataAccess).
- Умовне маппінг (Conditional Mapping): AutoMapper також підтримує умовне маппінг.
- Flattening (Сплощення):
public class Order
{
public int OrderId { get; set; }
public Customer Customer { get; set; }
}
public class Customer
{
public string Name { get; set; }
public string Email { get; set; }
}
public class OrderDTO
{
public int OrderId { get; set; }
public string CustomerName { get; set; }
public string CustomerEmail { get; set; }
}
CreateMap<Order, OrderDTO>()
.ForMember(dest => dest.CustomerName, opt => opt.MapFrom(src => src.Customer.Name))
.ForMember(dest => dest.CustomerEmail, opt => opt.MapFrom(src => src.Customer.Email));
- Моніторинг продуктивності маппінгу: При роботі з великими наборами даних перетворення AutoMapper можуть створювати проблеми з продуктивністю. Для оптимізації процесів маппінгу слід застосовувати різні стратегії.
Перекладено з: .NET Projelerinde AutoMapper Kullanımı