AutoMapper چیست؟
کتابخانهای برای نگاشت خودکار بین Objectها (مثلاً Entity به DTO) بر اساس تطابق نام Propertyها، بهجای نوشتن دستی کد Mapping.
چرا مهم است؟
بدون AutoMapper، هر بار که یک Entity تغییر میکند باید کد Mapping دستی مرتبط با آن را هم در چند جای پروژه بهروزرسانی کرد؛ نگاشت متمرکز این ریسک فراموشی را کم میکند.
تعریف Profile
public class OrderProfile : Profile
{
public OrderProfile()
{
CreateMap<Order, OrderDto>()
.ForMember(dest => dest.CustomerName, opt => opt.MapFrom(src => src.Customer.FullName));
}
}
استفاده
builder.Services.AddAutoMapper(typeof(OrderProfile));
// در سرویس یا Handler
var dto = _mapper.Map<OrderDto>(order);
نکات مهم
- نگاشت پیشفرض بر اساس تطابق دقیق نام Property انجام میشود؛ برای موارد متفاوت باید صریحاً با
ForMemberمشخص کرد. - در پروژه بزرگ، بهتر است هر Feature/ماژول Profile مخصوص خودش را داشته باشد، نه یک Profile غولپیکر مشترک.
اشتباه رایج
❌ استفاده از AutoMapper برای منطق تبدیل پیچیده (محاسبات شرطی، ترکیب چند Entity با قوانین کسبوکار) — چون این منطق داخل Profile «پنهان» میشود و Debug کردنش سختتر از یک متد Mapping دستی ساده است. برای نگاشتهای ساده و تخت AutoMapper مناسب است؛ برای منطق پیچیده، نگاشت دستی خواناتر و قابلتستتر است.
خلاصه
AutoMapper بین دو Object (مثلاً Entity و DTO) بر اساس تطابق نام Property بهصورت خودکار نگاشت انجام میدهد و از تکرار کد Mapping دستی جلوگیری میکند. برای موارد سفارشی از ForMember استفاده میشود. برای منطق تبدیل پیچیده، نگاشت دستی خواناتر و قابلردیابیتر است.
