- بواسطة x32x01 ||
إزاي Mapster أو AutoMapper بيوفروا وقتك في الـ DTOs؟ 🤝💻
لو اشتغلت في أي مشروع .NET هتلاقي نفسك كل شوية بتعمل نفس الشغل:
كلاس من الـDatabase → يتحول لـDTO
Request من الـFrontend → يتحول لـEntity
وبيفضل الموضوع ده يتكرر ويتكرر لحد ما تحس إنك بقيت عامل زي ماكينة نسخ شغالة طول الوقت.
العملية دي اسمها Mapping، ولما عدد الـEntities و الـDTOs يكتر… هتلاقي إن كتابة الـMapping يدوي بقت حاجة مملة جدًا وممكن يحصل فيها غلطات بسهولة.
هنا بيجي دور أدوات زي AutoMapper و Mapster 👇
دول بيخلوا التحويلات دي تحصل بشكل أوتوماتيك بدل ما تكتبها كل مرة بإيدك.
لكن السؤال المهم:
مين أفضل؟ وإمتى تستخدم ده وإمتى تستخدم ده؟
يلا نفهم بهدوء وبطريقة بسيطة 🌟
زي:
مثال بسيط:
لو هنبعت UserEntity للـFrontend زي ما هي
الـPasswordHash هيطلع معاه… وده خطر 🔥
علشان كده بنستخدم DTO.
الموضوع بسيط صح؟
بس تخيل تعمل كده مع 50 موديل و 100 DTO
هتلاقي نفسك غرقان في كود مكرر.
فكرته إنه يعمل mapping تلقائي بناءً على أسماء الـProperties.
بصيغة تانية:
هو قوي جدًا… بس أوقات تقيل شوية.
الفرق إنه بيعمل Compile للـMappings كأنك أنت اللي كتبتها يدوي
وده بيديه أداء أسرع بكتير.
وده كده؟ 😅
أيوه… بكل بساطة.
يعني بيكتب mapping نيابة عنك.
آه Mapster أسرع،
بس ده مش معناه إن AutoMapper بطيء لدرجة إنه يبهدل السيرفر.
في 80% من المشاريع… مش هتحس بالفرق أصلاً.
الأهم بكتير هو:
ولو عجبك الموضوع…
ابدأ بتجربة Mapster في مشروع صغير بس وشوف الفرق بنفسك 😉
لو اشتغلت في أي مشروع .NET هتلاقي نفسك كل شوية بتعمل نفس الشغل:
كلاس من الـDatabase → يتحول لـDTO
Request من الـFrontend → يتحول لـEntity
وبيفضل الموضوع ده يتكرر ويتكرر لحد ما تحس إنك بقيت عامل زي ماكينة نسخ شغالة طول الوقت.
العملية دي اسمها Mapping، ولما عدد الـEntities و الـDTOs يكتر… هتلاقي إن كتابة الـMapping يدوي بقت حاجة مملة جدًا وممكن يحصل فيها غلطات بسهولة.
هنا بيجي دور أدوات زي AutoMapper و Mapster 👇
دول بيخلوا التحويلات دي تحصل بشكل أوتوماتيك بدل ما تكتبها كل مرة بإيدك.
لكن السؤال المهم:
مين أفضل؟ وإمتى تستخدم ده وإمتى تستخدم ده؟
يلا نفهم بهدوء وبطريقة بسيطة 🌟
يعني إيه DTO أصلاً؟ 🤔
الـ DTO (Data Transfer Object) هو object بسيط بنستخدمه علشان ننقل الداتا من مكان لمكانزي:
- من الـBackend للـFrontend
- من API لـAPI
- من form لـDatabase
مثال بسيط:
C#:
public class UserEntity
{
public int Id { get; set; }
public string FullName { get; set; }
public string PasswordHash { get; set; }
}
public class UserDto
{
public int Id { get; set; }
public string FullName { get; set; }
} الـPasswordHash هيطلع معاه… وده خطر 🔥
علشان كده بنستخدم DTO.
المشكلة بقى 😅
كتابة mapping يدوي ليهم بتكون كده: C#:
var dto = new UserDto
{
Id = user.Id,
FullName = user.FullName
}; الموضوع بسيط صح؟
بس تخيل تعمل كده مع 50 موديل و 100 DTO
هتلاقي نفسك غرقان في كود مكرر.
AutoMapper: اللاعب القديم الخبير 🧓⚙️
AutoMapper مشهور جدًا وبقاله سنين في السوق.فكرته إنه يعمل mapping تلقائي بناءً على أسماء الـProperties.
مثال استخدامه:
C#:
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<UserEntity, UserDto>();
});
var mapper = config.CreateMapper();
var dto = mapper.Map<UserDto>(user); مميزات AutoMapper ✅
- Mature ومستقر
- Community كبير
- بيدعم Conditional Mapping
- بيدعم Custom Resolvers
- بيندمج كويس جدًا مع LINQ والـQueries
عيوب AutoMapper ❌
- أوقات بيبقى معقد زيادة عن اللزوم
- بيعتمد على Reflection كتير → وده يقلل الأداء في الـLoads الكبيرة
- محتاج Configuration أكتر شوية من Mapster
بصيغة تانية:
هو قوي جدًا… بس أوقات تقيل شوية.
Mapster: اللاعب الجديد السريع ⚡🚀
Mapster أحدث من AutoMapper، وهدفه الأساسي هو السرعة والبساطة.الفرق إنه بيعمل Compile للـMappings كأنك أنت اللي كتبتها يدوي
وده بيديه أداء أسرع بكتير.
مثال:
C#:
var dto = user.Adapt<UserDto>(); أيوه… بكل بساطة.
ليه Mapster أسرع؟ 🤔
علشان بيستخدم Expression Trees ويولد كود حقيقي بدل الـReflection.يعني بيكتب mapping نيابة عنك.
مميزات Mapster ✅
- أسرع من AutoMapper في أغلب الحالات
- سهل الاستخدام جدًا
- API نظيف وبسيط
عيوب Mapster ❌
- لسه أحدث، فـ features المتقدمة أقل من AutoMapper شوية
- لو الـMapping معقد، هتحتاج تفهمه كويس
طيب… أستخدم مين؟ 🎯
خلينا نقولها بمثال واقعي:| الحالة | الأفضل |
|---|---|
| عندك مشروع كبير وفيه Mapping كتير جدًا | Mapster (علشان الأداء) |
| عندك Mapping معقد وBusiness Rules كتير | AutoMapper (علشان المرونة) |
| بتشتغل في شركة معظم كودها AutoMapper | كمل AutoMapper |
| بتبدأ مشروع جديد من الصفر | Mapster هيبقى خيار ممتاز |
نقطة مهمة جدًا ⚠️
الـPerformance مش دايمًا هو العامل الأساسي.آه Mapster أسرع،
بس ده مش معناه إن AutoMapper بطيء لدرجة إنه يبهدل السيرفر.
في 80% من المشاريع… مش هتحس بالفرق أصلاً.
الأهم بكتير هو:
- الكود يبقى واضح
- سهل تتعدل عليه
- تقدر تفهمه بعد سنة من دلوقتي
الفرق في الكود 👇
AutoMapper Mapping
C#:
cfg.CreateMap<CreateUserRequest, UserEntity>(); Mapster Mapping
C#:
TypeAdapterConfig<CreateUserRequest, UserEntity>.NewConfig(); تحويل
C#:
var user = request.Adapt<UserEntity>(); الخلاصة 🧠☕
- AutoMapper = قوي + مرن + مستقر
- Mapster = أسرع + أبسط + خفيف
ولو عجبك الموضوع…
ابدأ بتجربة Mapster في مشروع صغير بس وشوف الفرق بنفسك 😉