C# та Asp.Net серії статей, що я пишу, розповідаючи про ці технології, вітаю вас! Сподіваюся, що це буде корисно і знайде своє місце серед ваших знань. Гарного читання! 😊
Перетворення між об'єктами є важливою операцією у сучасних програмних проектах. Під час передачі даних між різними шарами часто виникає необхідність перетворення одного об'єкта на інший. Коли такі перетворення виконуються вручну, це займає багато часу, є схильним до помилок і може призвести до збільшення складності коду. І ось тут на допомогу приходить AutoMapper. У цій статті ми детально розглянемо бібліотеку AutoMapper, основні сценарії її використання та як її застосовувати в ASP.NET Core проектах. Також ми продемонструємо практичне використання з кодовими прикладами на C#.
1. Що таке AutoMapper?
AutoMapper — це бібліотека для C#, яка дозволяє легко і швидко перетворювати один об'єкт на інший. Вона особливо корисна при перетворенні класів DTO (Data Transfer Object) на доменні моделі або навпаки.
Переваги AutoMapper:
- Зменшує дублювання коду: Уникає необхідності писати повторюваний код для операцій перетворення, що заощаджує час.
- Легке управління: Логіка перетворення визначена в одному місці, що спрощує управління.
- Швидка розробка: Спрощує складні операції перетворення, що прискорює процес розробки.
- Читабельність: Покращує читабельність коду та полегшує його супровід.
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, що містить обмежену інформацію, яку буде відправлено користувачеві.
Крок 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
не є порожнім.
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