مقدمة سريعة لحقن التبعية: ما هو ، ومتى يتم استخدامه

المقدمة

في هندسة البرمجيات ، يُعد حقن التبعية أسلوبًا يوفر بواسطته كائن واحد (أو طريقة ثابتة) تبعيات كائن آخر. التبعية هي كائن يمكن استخدامه (خدمة).

هذا هو تعريف ويكيبيديا ولكنه لا يزال ، لكن ليس من السهل فهمه. لذلك دعونا نفهمها بشكل أفضل.

قبل أن نفهم ما تعنيه في البرمجة ، دعنا أولاً نرى ما تعنيه بشكل عام لأنها ستساعدنا على فهم المفهوم بشكل أفضل.

التبعية أو التبعية تعني الاعتماد على شيء ما للحصول على الدعم. كما لو قلت إننا نعتمد كثيرًا على الهواتف المحمولة أكثر مما يعني أننا نعتمد عليها.

لذا قبل الدخول في حقن التبعية ، دعونا أولاً نفهم معنى التبعية في البرمجة.

عندما تستخدم الفئة A بعض وظائف الفئة B ، يقال أن الفئة A لها تبعية للفئة B.

في Java ، قبل أن نتمكن من استخدام طرق الفئات الأخرى ، نحتاج أولاً إلى إنشاء كائن من تلك الفئة (أي أن الفئة A تحتاج إلى إنشاء مثيل للفئة B).

لذلك ، فإن نقل مهمة إنشاء الكائن إلى شخص آخر واستخدام التبعية مباشرة يسمى حقن التبعية.

لماذا يجب علي استخدام حقن التبعية؟

لنفترض أن لدينا فئة سيارات تحتوي على أشياء مختلفة مثل العجلات والمحرك وما إلى ذلك.

هنا تكون فئة السيارة مسؤولة عن إنشاء كل كائنات التبعية. الآن ، ماذا لو قررنا التخلي عن MRFWheels في المستقبل وأردنا استخدام Yokohama Wheels؟

سنحتاج إلى إعادة إنشاء جسم السيارة باستخدام تبعية جديدة في يوكوهاما. ولكن عند استخدام حقن التبعية (DI) ، يمكننا تغيير العجلات في وقت التشغيل (لأنه يمكن إدخال التبعيات في وقت التشغيل بدلاً من وقت التجميع).

يمكنك التفكير في DI على أنها الوسيط في الكود الخاص بنا الذي يقوم بكل عمل إنشاء كائن العجلات المفضل وتقديمه إلى فئة السيارات.

إنها تجعل فئة السيارات الخاصة بنا مستقلة عن إنشاء كائنات العجلات والبطارية وما إلى ذلك.

هناك ثلاثة أنواع أساسية من حقن التبعية:

  1. حقن المُنشئ: يتم توفير التبعيات من خلال مُنشئ فئة.
  2. حقن الواضع: يكشف العميل عن طريقة ضبط يستخدمها الحاقن لحقن التبعية.
  3. حقن الواجهة: توفر التبعية طريقة حاقن من شأنها ضخ التبعية في أي عميل يتم تمريره إليه. يجب على العملاء تنفيذ واجهة تعرض طريقة تعيين تقبل التبعية.

لذا فإن مسؤولية حقن التبعية هي:

  1. قم بإنشاء الأشياء
  2. تعرف على الفئات التي تتطلب تلك الأشياء
  3. وتزويدهم بكل تلك الأشياء

إذا كان هناك أي تغيير في الكائنات ، فعندئذٍ تنظر DI في الأمر ولا ينبغي أن تهم الفصل الذي يستخدم هذه الكائنات. وبهذه الطريقة ، إذا تغيرت الكائنات في المستقبل ، فإن مسؤولية DI هي توفير الكائنات المناسبة للفصل.

انعكاس السيطرة - المفهوم الكامن وراء DI

ينص هذا على أنه لا ينبغي للفئة تكوين تبعياتها بشكل ثابت ولكن يجب تكوينها بواسطة فئة أخرى من الخارج.

إنه المبدأ الخامس لـ SOLID - theخمسة مبادئ أساسية للبرمجة والتصميم الموجه للكائنات من قبل العم بوب - والتي تنص على أن الفصل يجب أن يعتمد على التجريد وليس على الكتل الخرسانية (بعبارات بسيطة ، مشفرة).

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

ملاحظة: إذا كنت تريد التعرف على مبادئ SOLID بواسطة العم بوب ، فيمكنك التوجه إلى هذا الرابط.

فوائد استخدام DI

  1. يساعد في اختبار الوحدة.
  2. يتم تقليل رمز لوحة الغلاية ، حيث يتم تهيئة التبعيات بواسطة مكون الحاقن.
  3. يصبح تمديد التطبيق أسهل.
  4. يساعد على تمكين الاقتران السائب ، وهو أمر مهم في برمجة التطبيقات.

عيوب DI

  1. التعلم معقد بعض الشيء ، وفي حالة الإفراط في استخدامه يمكن أن يؤدي إلى مشكلات إدارية ومشكلات أخرى.
  2. يتم دفع العديد من أخطاء وقت الترجمة إلى وقت التشغيل.
  3. يتم تنفيذ أطر حقن التبعية مع انعكاس أو برمجة ديناميكية. يمكن أن يؤدي ذلك إلى إعاقة استخدام أتمتة IDE ، مثل "العثور على المراجع" و "إظهار التسلسل الهرمي للمكالمات" وإعادة البناء الآمن.

يمكنك تنفيذ حقن التبعية بنفسك (Pure Vanilla) أو استخدام مكتبات أو أطر عمل تابعة لجهات خارجية.

المكتبات والأطر التي تنفذ DI

  • الربيع (جافا)
  • جوجل Guice (جافا)
  • خنجر (جافا وأندرويد)
  • قلعة وندسور (.NET)
  • الوحدة (.NET)

لمعرفة المزيد حول حقن التبعية ، يمكنك الاطلاع على الموارد التالية:

Java Dependency Injection - مثال على نمط تصميم DI - JournalDev

استخدام حقن التبعية في Java - مقدمة - دروس - Vogella

انعكاس حاويات التحكم ونمط حقن التبعية - مارتن فاولر

آمل أن يساعد!

إذا أعجبك المقال وترغب في قراءة المزيد من المقالات الرائعة ، فاتبعني هنا (Bhavya Karia) وأظهر دعمك لأنه يحفزني على كتابة المزيد.

إذا كان لديك أي أسئلة أو تعليقات لي ، فدعنا نتواصل على LinkedIn و Twitter و Facebook.

تحرير 1:

بفضل Sergey Ufocoder ، تم الآن تحويل هذه المقالة إلى اللغة الروسية. أصدقائي الروس والذين يستطيعون جميعًا قراءة اللغة الروسية يقرؤونها.

رابط المقال

أيضًا ، إذا كنت تريد تطبيق DI في JavaScript وتبحث عن مكتبة ، فإن Jo Surikat يقترح عليك تجربة مكتبته.

دي نينجا

اقترح Nicolas Froidure مكتبة DI رائعة أخرى في JavaScript.

knifecycle

تحرير 2:

إذا كنت مطور PHP ، فلا داعي للقلق ، فقد غطيت جميعًا أيضًا. أوصى Gordon Forsythe بهذه المكتبة الرائعة التي قد ترغب جميعًا في تجربتها.

أورين

شكرا على كل الكلمات اللطيفة التي تلقيتها. شارك بالمقال حتى يستفيد المزيد والمزيد من الناس.

إذا تعلمت شيئًا أو شيئين ، يرجى مشاركة هذه القصة!