تحسين كود Laravel باستخدام DTO فى مشروعك

x32x01
  • بواسطة 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 بيخليك تسيطر على المشروع من أول لحظة، وبيمنع أي Data Mess ممكن يحصل بعد شهور.

خلاصة الكلام 🎯🔥

الـ DTO مش مجرد “تريند” في Laravel…
ده أسلوب كتابة محترم، بيخلي مشروعك نضيف ومفهوم وسهل، وبيخلي أي حد يدخل بعدك يفهم كل حاجة بسهولة.

لو ناوي تكون محترف… استخدم DTO من النهاردة.
ولو مشروعك كبير… يبقى لازم تستخدمه.
ولو شغال في شركة… يبقى ده أساس الكود.
 
المواضيع ذات الصلة
x32x01
الردود
1
المشاهدات
1K
x32x01
x32x01
x32x01
الردود
0
المشاهدات
120
x32x01
x32x01
x32x01
الردود
0
المشاهدات
250
x32x01
x32x01
x32x01
الردود
0
المشاهدات
659
x32x01
x32x01
x32x01
الردود
0
المشاهدات
495
x32x01
x32x01
الدخول أو التسجيل السريع
نسيت كلمة مرورك؟
إحصائيات المنتدى
المواضيع
2,046
المشاركات
2,247
أعضاء أكتب كود
489
أخر عضو
islam5793
عودة
أعلى