I'm always excited to take on new projects and collaborate with innovative minds.

Phone

+20 115 052 9992

Email

contact@ibrahimahmed.online

Website

https://ibrahimahmed.online/

Social Links

فهم نمط الـ Repository في Laravel: دليل شامل

تعلم كل ما تحتاج معرفته عن نمط الـ Repository في Laravel. هذا الدليل يشرح كيفية تنفيذه بفعالية، مميزاته، وكيف يحسن من هيكل وصيانة تطبيقات Laravel الخاصة بك.

فهم نمط الـ Repository في Laravel: دليل شامل

فهم نمط الـ Repository في Laravel: دليل شامل

لما تكون شغال بـ Laravel، ممكن تصادف نمط تصميم اسمه Repository Pattern. بس إيه بالضبط يعني؟ إزاي ممكن تطبقه في مشاريع Laravel بتاعتك؟ في المقال ده ه نشرح لك إيه هو نمط الـ Repository، وازاي يساعدك تحسن هيكل تطبيقك، وازاي ممكن تنفذه خطوة بخطوة. لو كنت مطور Laravel وعايز تكتب كود أنظف وأسهل في الصيانة، المقال ده ليك!

إيه هو نمط الـ Repository؟

نمط الـ Repository هو نمط تصميم بيساعد في فصل طبقة البيانات في التطبيق بتاعك. بمعنى تاني، هو بيسمح لك تفصل المنطق الخاص بالوصول للبيانات عن بقية منطق التطبيق، وده بيخلي هيكل الكود بتاعك أنظف وأكثر تنظيمًا. باستخدام الـ Repositories، تقدر تقلل التكرار في الكود وتجعل التطبيق أسهل في الصيانة.

ليه لازم تستخدم نمط الـ Repository في Laravel؟

فصل الاهتمامات: النمط ده بيخلي الكود بتاعك أكتر تنظيمًا عن طريق فصل منطق البيانات عن باقي منطق التطبيق، وبالتالي بيخلي كل جزء من الكود يركز في حاجة واحدة بس.

تحسين قابلية الصيانة: لما تستخدم الـ Repository، بيكون أسهل إنك تعدل أو تطور أجزاء معينة في الكود من غير ما تؤثر على باقي التطبيق.

التوسع والتطوير: مع زيادة حجم التطبيق، بيبقى أسهل تضيف أو تعدل في طبقة البيانات من غير ما تأثر على باقي الكود.

اختبار الوحدة: من السهل كتابة اختبارات الوحدة على الـ Repositories لأنهم بيكونوا مفصولين عن بقية المنطق في التطبيق.

كيفية تنفيذ نمط الـ Repository في Laravel؟

الحزمة المستخدمة: Laravel Repository Pattern

في المثال ده، هنستخدم حزمة Laravel Repository Pattern لتمكيننا من تطبيق النمط ده بسهولة. الحزمة دي بتساعدك تكتب كود مرتب ومنظم بشكل أفضل.

رابط الحزمة: https://github.com/DevYSM/laravel-repository-pattern

3. أوامر Artisan المتاحة:

إنشاء Repository:

php artisan ysm:repository ModelName [--soft-deletes]

إنشاء Service:

php artisan ysm:service ModelName [--soft-deletes]

إنشاء Controller:

php artisan ysm:controller ModelName [--type=api|web] [--dir=CustomDir] [--soft-deletes] [--with-routes] [--with-rs]

4. الوظائف الأساسية للحزمة:

RepositoryInterface / BaseRepository:

getAll: جلب كل السجلات مع العلاقات والترتيب.

paginate: جلب السجلات بشكل مبلّغ مع التصفية والفرز.

create: إنشاء سجل جديد.

update: تحديث سجل.

delete: حذف سجل.

BaseService: يحتوي على نفس الوظائف الموجودة في الـ Repository.

5. التعامل مع Soft Deletes:

الحزمة بتدعم **soft deletes** (الحذف اللين) بشكل كامل. في حالة لما تكون عايز تحذف السجل بشكل لين، بيتم تخزينه في قاعدة البيانات مع علامة تُشير إلى أنه محذوف، لكن مش بيتم حذفه بشكل نهائي.

مثال على التعامل مع الـ Soft Deletes:

استرجاع السجلات المحذوفة:

$deletedPosts = $this->postRepository->onlyTrashed()->get();

استرجاع كل السجلات بما فيهم المحذوفة:

$allPosts = $this->postRepository->withTrashed()->get();

حذف السجل بشكل لين:

$this->postRepository->delete($postId);

تحسين الـ Query Performance

الحزمة دي كمان بتساعدك في تحسين أداء الاستعلامات (queries). زي ما وضح لي المطور المسؤول عن الحزمة، الاستعلامات في الحزمة بتتظبط بشكل جيد بالنسبة لعدد السجلات وحجمها. دا كان مثال على الاستعلامات والأوقات اللي تم تنفيذها:

Query:
select * from `posts` order by `created_at` desc limit 15 offset 0
Duration: 16.00ms
Happened: 12s ago

Query:
select count(*) as aggregate from `posts`
Duration: 4.06ms
Happened: 12s ago
image%20(1).png
image%20(2).png

التعديلات الأخيرة على الحزمة

تم إضافة بعض الأوامر الجديدة لتسهيل عملية إنشاء الـ Routes و الـ Repository و الـ Service و الـ Controller. المميز بقى إنك لو عملت Generate للـ Controller، الحزمة هتعمل لك CRUD كامل بشكل تلقائي، يعني كل ما عليك تعمله هو تعديل الكود بما يتناسب مع احتياجاتك.

وكمان فيه ميزة جديدة اسمها --dir، اللي من خلالها تقدر تحدد مكان الـ Routes و Controller بحيث تحافظ على تنظيم المشروع.

وأخيرًا، تم إضافة ميزة auto-bind اللي بتربط الـ Routes اللي تم إنشاؤها تلقائيًا في الحزمة، يعني لما تعمل Generate، الحزمة هتربط الملفات مع بعض بشكل أوتوماتيكي.

مثال للأمر بعد التعديلات:

php artisan ysm:controller User --type=api --with-routes --with-rs --soft-deletes --dir=Api\\Admin\\v1

الأمر ده هيعمل لك الـ Controller في المجلد المناسب، بالإضافة إلى الـ Routes التي ستظهر في المسار api/admin/v1/users.php.

الخلاصة

نمط الـ Repository في Laravel بيساعدك تفصل الكود بتاعك وتخليه أكثر تنظيمًا وسهولة في الصيانة. من خلال تنفيذ النمط ده، هتقدر تكتب كود مرن قابل للتطوير، وتختبره بسهولة، وتحسن أداء التطبيق. لو كنت لسه مبتدئ في Laravel أو بتدور على طرق لتحسين الكود بتاعك، نمط الـ Repository هيكون واحد من أفضل الحلول اللي ممكن تستخدمها.

الختام: استخدام Repository Pattern في Laravel هو خطوة هامة لتحسين البنية المعمارية لتطبيقك وزيادة قابليته للصيانة. جربه دلوقتي وشوف الفرق بنفسك!


Share

Related posts

May 23, 2025 • 1 min read
FlyEnv - أداة إدارة بيئة تطوير متكاملة للمطورين

FlyEnv هي أداة شاملة لإدارة بيئات التطوير، بتسهل على المطورين التعامل مع إصدارات متعددة من لغات البر...

Mar 28, 2025 • 1 min read
اجعل Laravel يقوم بـ Git Pull تلقائيًا بعد كل Push في GitHub باستخدام Webhook – بدون تدخل يدوي! 🚀

هل تعبت من الدخول إلى السيرفر كل مرة لتحديث الكود بعد git push؟ 🤦‍♂️ في هذا المقال، ستتعلم كيف تجعل...

Mar 23, 2025 • 1 min read
كل ما تحتاج معرفته عن الجلسات (Sessions) في Laravel – التخزين، الأمان، والتشفير خطوة بخطوة

تعرف على الجلسات (Sessions) في Laravel، كيف تعمل، طرق تخزينها، وأفضل الممارسات لحمايتها. سنشرح بالتف...