Automapper: Перетворення між об’єктами

C# та Asp.Net серії статей, що я пишу, розповідаючи про ці технології, вітаю вас! Сподіваюся, що це буде корисно і знайде своє місце серед ваших знань. Гарного читання! 😊

pic

Перетворення між об'єктами є важливою операцією у сучасних програмних проектах. Під час передачі даних між різними шарами часто виникає необхідність перетворення одного об'єкта на інший. Коли такі перетворення виконуються вручну, це займає багато часу, є схильним до помилок і може призвести до збільшення складності коду. І ось тут на допомогу приходить AutoMapper. У цій статті ми детально розглянемо бібліотеку AutoMapper, основні сценарії її використання та як її застосовувати в ASP.NET Core проектах. Також ми продемонструємо практичне використання з кодовими прикладами на C#.

1. Що таке AutoMapper?

AutoMapper — це бібліотека для C#, яка дозволяє легко і швидко перетворювати один об'єкт на інший. Вона особливо корисна при перетворенні класів DTO (Data Transfer Object) на доменні моделі або навпаки.

Переваги AutoMapper:

  1. Зменшує дублювання коду: Уникає необхідності писати повторюваний код для операцій перетворення, що заощаджує час.
  2. Легке управління: Логіка перетворення визначена в одному місці, що спрощує управління.
  3. Швидка розробка: Спрощує складні операції перетворення, що прискорює процес розробки.
  4. Читабельність: Покращує читабельність коду та полегшує його супровід.

2. Як встановити AutoMapper?

Крок 1: Встановлення пакету через NuGet

Щоб додати бібліотеку AutoMapper до вашого проекту, використовуйте наступну команду:

dotnet add package AutoMapper.Extensions.Microsoft.DependencyInjection

3.

Використання AutoMapper

Сценарій: Перетворення Даних Користувачів

Крок 1: Створення Моделі та DTO
Спочатку визначимо доменну модель та DTO класи:

namespace MyApp.Core.Models  
{  
 public class User  
 {  
 public int Id { get; set; }  
 public string FirstName { get; set; }  
 public string LastName { get; set; }  
 public string Email { get; set; }  
 }  
}  

namespace MyApp.Core.DTOs  
{  
 public class UserDto  
 {  
 public string FullName { get; set; }  
 public string Email { get; set; }  
 }  
}

Пояснення:

  • User: Модель, що використовується в базі даних або доменному шарі.
  • UserDto: DTO, що містить обмежену інформацію, яку буде відправлено користувачеві.

pic

Крок 2: Визначення Профілю Перетворення
Профілі перетворення визначають, як саме AutoMapper буде виконувати перетворення.

using AutoMapper;  
using MyApp.Core.Models;  
using MyApp.Core.DTOs;  

namespace MyApp.Application.Mappings  
{  
 public class UserProfile : Profile  
 {  
 public UserProfile()  
 {  
 CreateMap<User, UserDto>()  
 .ForMember(dest => dest.FullName, opt => opt.MapFrom(src => $"{src.FirstName} {src.LastName}"));  
 }  
 }  
}

Пояснення:

  • CreateMap<User, UserDto>(): Ми вказуємо, що будемо перетворювати об'єкти типу User в об'єкти типу UserDto.
  • ForMember: Створюємо властивість FullName, об'єднуючи властивості FirstName та LastName.

Крок 3: Налаштування AutoMapper

Налаштуйте AutoMapper у файлі Program.cs:

using AutoMapper;  
using MyApp.Application.Mappings;  

var builder = WebApplication.CreateBuilder(args);  

builder.Services.AddAutoMapper(typeof(UserProfile)); // Додаємо профіль перетворення  

var app = builder.Build();  

app.MapControllers();  

app.Run();

Крок 4: Використання в Controller

Тепер використаємо AutoMapper в контролері, щоб перетворити об'єкт User в об'єкт UserDto:

using AutoMapper;  
using Microsoft.AspNetCore.Mvc;  
using MyApp.Core.Models;  
using MyApp.Core.DTOs;  

namespace MyApp.API.Controllers  
{  
 [ApiController]  
 [Route("api/[controller]")]  
 public class UsersController : ControllerBase  
 {  
 private readonly IMapper _mapper;  

 public UsersController(IMapper mapper)  
 {  
 _mapper = mapper;  
 }  

 [HttpGet]  
 public IActionResult GetUser()  
 {  
 var user = new User  
 {  
 Id = 1,  
 FirstName = "John",  
 LastName = "Doe",  
 Email = "[email protected]"  
 };  

 var userDto = _mapper.Map<UserDto>(user);  

 return Ok(userDto);  
 }  
 }  
}

Пояснення:

  • Отримуємо інтерфейс IMapper через конструктор і використовуємо AutoMapper.
  • Map(user): Перетворюємо об'єкт User в об'єкт UserDto.
  • В результаті, API повертає DTO, що містить інформацію про FullName та Email.

4. Розширене Використання AutoMapper

1. Перетворення в Обидва Напрями

AutoMapper може виконувати перетворення в обидва напрямки:

CreateMap<User, UserDto>().ReverseMap();

Цей опис підтримує перетворення як з User в UserDto, так і з UserDto в User.

2. Перетворення Колекцій

AutoMapper може легко перетворювати колекції:

var users = new List<User>  
{  
 new User { Id = 1, FirstName = "John", LastName = "Doe", Email = "[email protected]" },  
 new User { Id = 2, FirstName = "Jane", LastName = "Smith", Email = "[email protected]" }  
};  

var userDtos = _mapper.Map<List<UserDto>>(users);

3. Умовне Перетворення

Для виконання умовного перетворення:

CreateMap<User, UserDto>()  
 .ForMember(dest => dest.Email, opt => opt.Condition(src => !string.IsNullOrEmpty(src.Email)));

Цей опис вказує, що перетворення буде виконуватись лише в тому випадку, якщо значення Email не є порожнім.

pic

5. Переваги AutoMapper

Ось деякі переваги використання AutoMapper:
Швидке та Легке Використання

AutoMapper може виконувати складні перетворення з кількома простими налаштуваннями. Особливо в великих проектах, використання центральної структури замість написання ручного коду для перетворень значно прискорює процес розробки.

2. Зменшення Повторення Коду

Ручне виконання перетворень призводить до повторення коду в проєктах, що ускладнює його підтримку. AutoMapper дозволяє визначити правила перетворень в одному центральному місці, тим самим усуваючи ці повтори. Це дозволяє зробити код чистішим і зменшити зайве навантаження.

3. Центральне Керування

Правила перетворень визначаються через профілі AutoMapper, що дозволяє централізовано керувати всіма процесами перетворення. Коли необхідно додати нове правило або змінити існуюче, достатньо внести зміни в профіль.

4. Оптимізація Продуктивності

AutoMapper здійснює оптимізовані перетворення для великих наборів даних. Зокрема, під час перетворення колекцій він працює набагато швидше за ручні методи. Це є великою перевагою в проєктах, де продуктивність має критичне значення.

5. Читабельний та Чистий Код

Читабельність коду є важливим фактором для довготривалого успіху програмних проєктів. Оскільки логіка перетворення переноситься в центральний профіль, код стає чистішим і зручнішим для читання. Перехід між об'єктами відбувається без зайвих кодових блоків для перетворень.

6. Двостороннє Перетворення

AutoMapper підтримує двосторонні перетворення між об'єктами. Ця можливість дозволяє використовувати одну й ту ж саму логіку для перетворення об'єкта з одного типу в інший, а також у зворотному напрямку.

7. Умовні та Спеціальні Перетворення

AutoMapper дозволяє виконувати перетворення за певними умовами. Наприклад, можна налаштувати перетворення властивості лише тоді, коли виконано певну умову. Ця гнучкість є великим плюсом для задоволення специфічних вимог.

8. Перетворення Колекцій

AutoMapper може легко перетворювати не лише окремі об'єкти, а й колекції. Ця можливість є корисною під час обробки наборів даних, що складаються з багатьох елементів.

9. Тестованість

Оскільки правила перетворення знаходяться в окремому профілі, їх можна тестувати незалежно. Це знижує кількість помилок у проєктах і забезпечує більш надійний процес перетворення.

10. Незалежність від Фреймворків та Технологій

AutoMapper можна використовувати не тільки в проєктах ASP.NET Core, але й в усіх C# проєктах. Це дає змогу повторно використовувати ту ж логіку перетворення на різних платформах і підвищує портативність проєктів.

11. Економія Часу

AutoMapper значно скорочує час розробки, усуваючи необхідність написання ручного коду для перетворень. Це особливо корисно в великих проєктах, де перетворення виконуються швидко і без проблем.

12. Стандартизація

Описуючи процеси перетворення через профілі AutoMapper, ми стандартизуємо ці процеси в межах проєкту. Це допомагає створити спільну мову між членами команди та організувати проєкт більш ефективно.

6. Результат

AutoMapper є потужним та популярним інструментом, що спрощує необхідність перетворення об'єктів, з якою часто стикаються в програмних проєктах. В цій статті ми дізналися про основи використання AutoMapper, як інтегрувати його в проєкти ASP.NET Core та як керувати процесами перетворення.

Використовуючи AutoMapper у ваших проєктах, ви зможете зробити код більш читабельним, керованим та ефективним. Дякую за ваш час, сподіваюся, що це було корисно. Бажаю зустрітися з вами у наступних читаннях.🙏

Перекладено з: Automapper Kullanımı ile Nesneler Arası Dönüşüm

Leave a Reply

Your email address will not be published. Required fields are marked *