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

فهم نمط الـ Repository في Laravel: دليل شامل
لما تكون شغال بـ Laravel، ممكن تصادف نمط تصميم اسمه Repository Pattern. بس إيه بالضبط يعني؟ إزاي ممكن تطبقه في مشاريع Laravel بتاعتك؟ في المقال ده ه نشرح لك إيه هو نمط الـ Repository، وازاي يساعدك تحسن هيكل تطبيقك، وازاي ممكن تنفذه خطوة بخطوة. لو كنت مطور Laravel وعايز تكتب كود أنظف وأسهل في الصيانة، المقال ده ليك!
Table of contents [Show]
إيه هو نمط الـ 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
.png)
.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 هو خطوة هامة لتحسين البنية المعمارية لتطبيقك وزيادة قابليته للصيانة. جربه دلوقتي وشوف الفرق بنفسك!