.NET API - DTOs وAutoMapper: نقل البيانات بين الطبقات
2.1 .NET API - DTOs وAutoMapper: نقل البيانات بين الطبقات
DTO هي اختصار لـ Data Transfer Object، وهي كائنات تُستخدم لنقل البيانات بين الطبقات داخل التطبيق، خاصة من الطبقة الخلفية (Backend) إلى العميل (Client).
أما AutoMapper فهي مكتبة في .NET تُستخدم لتحويل البيانات تلقائيًا بين الكائنات (من Entity إلى DTO والعكس).
🧱 لماذا نستخدم DTOs؟
- ✅ فصل كود قاعدة البيانات (Entity) عن كود العرض (Client).
- ✅ حماية الحقول الحساسة من الظهور في واجهة المستخدم.
- ✅ تحسين الأداء بنقل الحقول المطلوبة فقط.
📦 مثال: كيان المنتج Product
// الكيان المرتبط بقاعدة البيانات
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
public DateTime CreatedAt { get; set; }
}
نريد أن نعرض فقط الاسم والسعر:
// DTO
public class ProductDto
{
public string Name { get; set; }
public decimal Price { get; set; }
}
⚙️ تثبيت AutoMapper
dotnet add package AutoMapper.Extensions.Microsoft.DependencyInjection
🧠 إعداد AutoMapper
إنشاء ملف MappingProfile:
using AutoMapper;
public class MappingProfile : Profile
{
public MappingProfile()
{
CreateMap<Product, ProductDto>();
CreateMap<ProductDto, Product>();
}
}
ثم تسجيل AutoMapper في Program.cs
:
builder.Services.AddAutoMapper(typeof(MappingProfile));
🚀 استخدام AutoMapper داخل Controller
[ApiController]
[Route("api/[controller]")]
public class ProductsController : ControllerBase
{
private readonly AppDbContext _context;
private readonly IMapper _mapper;
public ProductsController(AppDbContext context, IMapper mapper)
{
_context = context;
_mapper = mapper;
}
[HttpGet]
public IActionResult GetAll()
{
var products = _context.Products.ToList();
var productDtos = _mapper.Map<List<ProductDto>>(products);
return Ok(productDtos);
}
}
📌 خلاصة
- DTOs هي كائنات لنقل البيانات بأمان وكفاءة.
- AutoMapper يسهل التحويل بين الكائنات دون كتابة كود يدوي كثير.
- ينصح دائمًا باستخدام DTOs في المشاريع الاحترافية لفصل الطبقات وتفادي الأخطاء الأمنية.
تعليقات
إرسال تعليق