اذهب إلى المحتوى

السؤال

Recommended Posts

  • 0
نشر

لو أردنا التشبيه فتخيل أنك في مطعم، سيصبح  (النادل Facade) أي الواجهة هي مثل النادل في المطعم، أنت تطلب منه الطعام (تستخدم الواجهة) دون الحاجة للذهاب إلى المطبخ بنفسك ومعرفة كيفية تحضيره، أي النادل يوفر لك واجهة بسيطة وسهلة للطلب.

في حين المطبخ (Service Container حاوية الخدمات) هي مثل المطبخ في المطعم، حيث تحتوي على جميع الطهاة (الخدمات) والمكونات اللازمة لتحضير الوجبات (وظائف تطبيقك)، بالتالي لا تحتاج للدخول إلى المطبخ ومعرفة تفاصيل تحضير الطعام، بل تكتفي بالطلب من النادل.

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

فلارافل تأتي مع مجموعة من الخدمات الجاهزة التي تُسَهّل تطوير التطبيقات وتلك الخدمات مُعرّفة مُسبقًا في لارافل وتُضاف تلقائيًا إلى حاوية الخدمات.، مثل:

  • نظام قواعد البيانات Eloquent.
  • نظام التخزين المؤقت Cache.
  • نظام إرسال البريد الإلكتروني Mail.
  • نظام المصادقة Authentication.

وعند استخدام حزم لارافل الخارجية، تُسجّل تلك الحزم خدماتها الخاصة في حاوية الخدمات، وبتلك الطريقة، باستطاعتك استخدام خدمات الحزمة بسهولة في تطبيقك.

وبإمكانك أنت إضافة خدمات إلى الحاوية لتنظيم منطق عمل تطبيقك وتطبيق مبدأ فصل الاهتمامات Separation of Concerns، ستجد تفصيل هنا:

الأمر يسير كما يلي:

  1. تطلب من النادل (تستخدم الواجهة) عندما تريد خدمة معينة في تطبيقك، فأنت تستخدم الواجهة المخصصة لها.
  2. النادل يخبر المطبخ (الواجهة تصل لحاوية الخدمات) تقوم الواجهة بالتواصل مع حاوية الخدمات للحصول على الخدمة التي طلبتها.
  3. المطبخ يُحضر الطعام (حاوية الخدمات تُجهّز الخدمة) تعمل حاوية الخدمات على تجهيز الخدمة التي طلبتها مع جميع التبعيات اللازمة.
  4. النادل يُقدم لك الطعام (الواجهة تعود بالنتيجة) تقوم الواجهة بإرجاع نتيجة الخدمة التي طلبتها بطريقة مبسطة وسهلة التعامل معها.

مثلاً لو تريد إرسال بريد إلكتروني من تطبيقك، فبدلاً من كتابة كود معقد للاتصال بخادم البريد الإلكتروني وإرسال الرسالة، فببساطة تعتمد على خدمة البريد الإلكتروني المتوفرة في حاوية الخدمات:

use Illuminate\Support\Facades\Mail;

Mail::to('user@example.com')->send(new WelcomeEmail());

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...