- بواسطة x32x01 ||
إزاي الـ DTO يخلي شغلك في Laravel أنضف وأسرع؟
لو إنت شغال على مشروع Laravel وبدأت تحس إن الدنيا بدأت "تفرط" منك شوية، والكود بقى مكركب ومش مرتب… يبقى أكيد جه الوقت إنّك تستخدم Data Transfer Object – DTO الـ DTO بجد من أكتر الحاجات اللي هتحسّن شكل مشروعك وتخلي الكود منظم وسهل تتابعه، خصوصًا لو مشروع كبير أو فيه Services و Layers كتير.
في البوست ده هنتكلم بشكل بسيط وواضح… من غير فصحى تقيلة… وهشرحلك ليه الـ DTO مهم جدًا في Laravel، وإزاي بيخلي الكود أنضف وأبسط، وهنعمل أمثلة عملية بالكود كمان.
جهّز نفسك… هنخلي مشروعك يمشي على خط مستقيم
يعني إيه أصلاً DTO؟
بص يا سيدي…الـ DTO هو Object بسيط كده، وظيفته إنه يشيل البيانات اللي داخلة (Input Data) في مكان واحد، بدل ما تبقى شغّال Arrays جاية من هنا وهنا، ومش عارف مصدرها إيه ولا هي Typed ولا لأ.
يعني بدل ما Controller بتاعك يستقبل 10 Parameters، أو تبقى ماشي عامل Arrays رايحة جاية… لأ، أنت بتلم كل البيانات في Object واحد "نضيف" ومبني صح
الميزة؟
كل حاجة بقت واضحة، Typed، ومتقفلة… يعني مفيش لعب!
ليه أصلاً تستخدم الـ DTO في Laravel؟
1. الكود بيبقى أوضح وأسهل في الصيانة
بدل ما تبقى كل ما تفتح Controller أو Service تحس إن في دوشة، لا…الـ DTO بيجمع البيانات كلها في Class واحد، وبالتالي أي تعديل تعمله يبقى من مكان واحد بس.
2. الـ Services و الـ Repositories بتتنفّس 
إنت أكيد شفت Services تستقبل 7 أو 10 Parameters…ودي حاجة بتخلي الكود شكله بشع
لما تعمل DTO…
بقى عندك:
Object واحد = Data كلها جوه.
3. Validation أوضح وأنضف
بدل ما تتعامل مع Request Validation وترجع تتعامل مع Arrays…إنت بتخلي الـ DTO يستقبل الـ Data جاهزة ومفلترة.
4. Consistency في كل المشروع
بدل ما كل Function تتعامل مع شكل بيانات مختلف…الـ DTO بيوحد شكل البيانات في كل Layers المشروع.
5. الكود بيبقى شبه كود الناس المحترفة 
ولو ناوي تشتغل في شركات كبيرة… هتلاقيهم معتمدين الـ DTO بشكل أساسي.طيب يلا نخش على مثال عملي 
هنعمل دلوقتي DTO اسمه CreateUserDTOوده هيستقبل بيانات إنشاء المستخدم.
مثال عملي: CreateUserDTO
PHP:
class CreateUserDTO
{
public function __construct(
public string $name,
public string $email,
) {}
public static function fromArray(array $data): self
{
return new self(
name: $data['name'],
email: $data['email'],
);
}
} الكلاس بسيط جدًا، لكن منظّم بشكل يخلي مشروعك يتحسن 10 مرات.
استخدام الـ DTO جوّه الـ Controller
دلوقتي نشوف بقى إزاي نستخدم الـ DTO ده جوّه الـ Controller: PHP:
public function store(CreateUserRequest $request, UserService $service)
{
$data = CreateUserDTO::fromArray($request->validated());
return $service->create($data);
} إنت حولت البيانات اللي جاية من الـ Request لـ DTO Typed جاهز، وبعدها بعتو للـ Service.
طيب فين الفرق الحقيقي اللي حصل؟
هقولّك بوضوح…1. Controller بقى نضيف جدًا
مفيهوش Arrays ولا لغبطة…مجرد سطرين.
2. Data Typed وواضحة
لو عندك email لازم يكون String… خلاص، هو String غصب عنه.3. أي تعديل في مكان واحد بس
عايز تضيف phone؟تروح لـ DTO وتضيفه… وخلاص.
4. الكود بقى شبه الأكواد الاحترافية
وده مهم جدًا للسيو، لأن مقاله عن “تحسين الكود” لازم يبان احترافي جدًا.طيب ينفع أستخدم DTO في حاجات أكبر؟ أكيد! 
- استخدام DTO مع Repositories
لو عندك Repository بتعمل Create أو Update…بدل ما تبعت Array…
تبعت DTO.
- استخدام DTO مع API Requests
لو API بتاعتك فيها Data كتير…الـ DTO هيوحد الشكل في كل Layers.
- استخدام DTO مع الForm Objects
هتلاقي الForm Objects أحلى وأرتب بكتير لما تستخدم DTO.مثال تاني: DTO لتحديث مستخدم UpdateUserDTO
PHP:
class UpdateUserDTO
{
public function __construct(
public string $name,
public string $email,
public ?string $password = null
) {}
public static function fromArray(array $data): self
{
return new self(
name: $data['name'],
email: $data['email'],
password: $data['password'] ?? null
);
}
} وفي الـ Service:
PHP:
public function update(User $user, UpdateUserDTO $dto)
{
$user->update([
'name' => $dto->name,
'email' => $dto->email,
'password' => $dto->password ? bcrypt($dto->password) : $user->password
]);
return $user;
} هل الـ DTO بيأثر على سرعة Laravel؟
بالعكس…استخدام الـ DTO مش بيأثر على الأداء نهائي، بالعكس ده بيزود الـ performance بشكل غير مباشر لأن:
- الكود بقى أوضح
- مفيش Data فوضوية
- كل Layer بقى ليه دور واضح
الـ DTO مع المشاريع الكبيرة
لو ناوي تعمل نظام ضخم، زي:- Ecommerce
- CRM
- ERP
- نظام إدارة مدارس أو مستشفيات
- موقع كبير بتعامل مع ملايين البيانات
خلاصة الكلام 
الـ DTO مش مجرد “تريند” في Laravel…ده أسلوب كتابة محترم، بيخلي مشروعك نضيف ومفهوم وسهل، وبيخلي أي حد يدخل بعدك يفهم كل حاجة بسهولة.
لو ناوي تكون محترف… استخدم DTO من النهاردة.
ولو مشروعك كبير… يبقى لازم تستخدمه.
ولو شغال في شركة… يبقى ده أساس الكود.