يجب أن يكون أي شخص تعلم Spring Framework قد سمع عن مفهومي Spring: IOC (انعكاس التحكم) و DI (حقن التبعية). بالنسبة لأولئك الجدد في الربيع ، فإنهم يشعرون دائمًا أن مفاهيم IOC و DI غامضة ويصعب فهمها. اليوم ، سأشارككم بعضًا من فهم الخبراء الفنيين عبر الإنترنت لإطار الربيع IOC والتحدث عن فهمي لـ Spring IOC.
ما هو IOC
IOC-inversionofcontrol ، أي "انعكاس التحكم" ، ليست تقنية ، ولكنها فكرة تصميم. في تطوير Java ، تعني IOC إعطاء الكائنات التي صممتها للسيطرة عليها بواسطة الحاويات ، بدلاً من التحكم فيها تقليديًا مباشرة داخل كائناتك.
IOC ، وهو جوهر الربيع ، يستمر طوال الوقت. بالنسبة لإطار الربيع ، يكون الربيع مسؤولاً عن التحكم في دورة حياة الكائن والعلاقة بين الكائنات. ماذا يعني هذا؟ لإعطاء مثال بسيط ، كيف نجد صديقة؟ من الموقف الشائع أن نذهب في كل مكان لنرى أين لدينا نساء جميلات ومظهر جيد ، ثم الاستفسار عن اهتماماتهن وأرقام QQ وأرقام الهواتف وأرقام IP وأرقام IQ ... وإيجاد طرق للتعرف عليهم ، ومنحهم ما يحلو لهم ، ثم هههه ... هذه العملية معقدة وعميقة ، ويجب أن نرتبط ومواجهة كل شيء. وينطبق الشيء نفسه على تطوير البرنامج التقليدي. في كائن ، إذا كنت ترغب في استخدام كائن آخر ، فيجب عليك الحصول عليه (جديد بنفسك ، أو الاستعلام عن واحد من JNDI). بعد الاستخدام ، يجب تدمير الكائن (مثل الاتصال ، وما إلى ذلك) ، وسيتم دمج الكائن دائمًا مع واجهات أو فئات أخرى.
كيف تفهم IOC؟ مفتاح فهم اللجنة الأولمبية الدولية هو توضيح "من يتحكم في من ، وما هو الضوابط ، ولماذا هو انعكاس (يجب أن يكون هناك موجب) ، وما هي جوانب الانعكاس" ، دعنا نحلل بعمق:
● من يتحكم في من وماذا: تصميم برمجة Javase التقليدية ، نقوم بإنشاء كائنات مباشرة من خلال جديد داخل الكائن ، وينشئ البرنامج بنشاط كائنات تابعة ؛ على الرغم من أن IOC لديها حاوية خاصة لإنشاء هذه الكائنات ، أي أن حاوية IOC تتحكم في إنشاء كائنات ؛ من يسيطر على من؟ بالطبع ، تتحكم حاوية IOC في الكائن ؛ ماذا للتحكم؟ أي أنه يتحكم بشكل أساسي في اكتساب الموارد الخارجية (وليس فقط الكائنات بما في ذلك الملفات ، إلخ).
● لماذا هو انعكاس؟ ما هي الجوانب الانقلاب: هناك دوران إيجابي. يتم التحكم في التطبيقات التقليدية بنشاط من قبل أنفسنا في الكائن للحصول مباشرة على الكائن التابع ، أي الدوران الإيجابي ؛ في حين أن الانقلاب هو الحاوية للمساعدة في إنشاء كائنات تعتمد عليها وحقنها ؛ لماذا هو انعكاس؟ نظرًا لأن الحاوية تساعدنا في العثور على الكائنات المعتمدة وحقنها ، فإن الكائن يقبل فقط الكائنات المعتمدة بشكل سلبي ، لذلك هو انعكاس ؛ ما هي الجوانب الانقلابات؟ يتم عكس الحصول على الكائن التابع.
دعنا نستخدم Legend لتوضيح أن البرمجة التقليدية مبينة في الشكل 1-1 ، والتي تنشئ بنشاط كائنات ذات صلة ثم يجمعها:
الشكل 1-1 مخطط تخطيطي للتطبيق التقليدي
عندما يكون لدي حاويات IOC/DI ، لم تعد هذه الكائنات يتم إنشاؤها بنشاط في فئة العميل ، كما هو موضح في الشكل 1-2:
الشكل 1-2 مخطط تخطيطي لهيكل البرنامج بعد حاوية IOC/DI يحتوي على حاوية IOC/DI
1.1.2 ماذا يمكن أن تفعل IOC
IOC ليست تقنية ، إنها مجرد فكرة ، قاعدة مهمة للبرمجة الموجهة للكائن ، والتي يمكن أن توجهنا كيفية تصميم برامج أفضل ، أفضل. يتم إنشاء جميع التطبيقات التقليدية بفعالية من قبلنا داخل الفصل ، مما يؤدي إلى اقتران عالٍ بين الفصول ويصعب اختباره ؛ مع حاوية IOC ، يتم تسليم التحكم في إنشاء كائنات تابعة وإيجادها إلى الحاوية ، ويقوم الحاوية بحقن الكائنات المدمجة ، وبالتالي فإن الكائن مقترن بشكل فضفاض ، وهو مناسب أيضًا للاختبار ، ويسهل إعادة الاستخدام الوظيفي ، والأهم من ذلك ، يجعل العمارة الكاملة للبرنامج مرنة للغاية.
في الواقع ، فإن أكبر تغيير تم تقديمه بواسطة IOC إلى البرمجة ليس من الكود ، ولكن من المنظور الأيديولوجي ، وتغيير "تبديل العبد الرئيسي". كان التطبيق في الأصل رئيسًا ، وأخذ زمام المبادرة للحصول على أي موارد. ومع ذلك ، في فكرة IOC/DI ، أصبح التطبيق سلبيًا ، وكان ينتظر بشكل سلبي حاوية IOC لإنشاء وحقن الموارد التي تحتاجها.
يعكس IOC جيدًا أحد قواعد التصميم الموجهة للكائنات - قاعدة هوليوود: "لا تبحث عننا ، سنبحث عنك" ؛ أي أن حاوية IOC تساعد الكائن في العثور على الكائن المعتمد المقابل وحقنه ، بدلاً من الكائن الذي يبحث عنه بنشاط.
1.1.3 IOC و DI
dipendencyInjection ، أي "حقن التبعية": يتم تحديد التبعيات بين المكونات بواسطة الحاوية أثناء وقت التشغيل. في مجازي ، تؤدي الحاوية ديناميكيًا إلى تبعية معينة في المكون. الغرض من حقن التبعية ليس جلب المزيد من الوظائف إلى نظام البرمجيات ، ولكن لزيادة تواتر إعادة استخدام المكون وبناء منصة مرنة وقابلة للتطوير للنظام. من خلال آلية حقن التبعية ، نحتاج فقط إلى تحديد الموارد التي يتطلبها الهدف دون أي رمز لإكمال منطق أعمالنا الخاص من خلال التكوين البسيط ، دون الاهتمام بالموارد المحددة ومن تنفيذها.
تتمثل إحدى النقاط الرئيسية في IOC في تزويد كائن ديناميكي بكائنات أخرى يحتاجها أثناء تشغيل النظام. يتم تحقيق ذلك من خلال DI (حقن التبعية). على سبيل المثال ، يحتاج الكائن A إلى تشغيل قاعدة البيانات. في الماضي ، كتبنا دائمًا الكود في A للحصول على كائن اتصال. مع الربيع ، نحتاج فقط إلى معرفة الربيع أن هناك حاجة إلى اتصال في A. فيما يتعلق بكيفية بناء هذا الاتصال ومتى يتم بنائه ، لا تحتاج إلى معرفة. عند تشغيل النظام ، سيقوم Spring بإنشاء اتصال في الوقت المناسب ، ثم حقنه في حقن مثل ، وبالتالي إكمال التحكم في العلاقة بين كل كائن. هناك حاجة إلى الاعتماد على الاتصال إلى التشغيل بشكل طبيعي ، ويتم حقن هذا الاتصال في الربيع بحلول الربيع ، ويأتي اسم حقن التبعية من هذا. فكيف يتم تنفيذ DI؟ ميزة مهمة بعد Java 1.3 هي الانعكاس ، والتي تسمح للبرنامج بإنشاء كائنات ديناميكيًا وتنفيذ طرق الكائنات وتغيير خصائص الكائنات عند التشغيل. يتم حقن الربيع من خلال التفكير.
مفتاح فهم DI هو: "من يعتمد على من ، لماذا تحتاج إلى الاعتماد عليه ، ومن يضخ من ، وما الذي يحقنه". دعونا نحللها بعمق:
● من يعتمد على من: بالطبع ، يعتمد التطبيق على حاوية IOC ؛
● لماذا هناك حاجة إلى التبعيات: تحتاج التطبيقات إلى حاويات IOC لتوفير موارد خارجية تتطلبها الكائنات ؛
● من يضخ من: من الواضح أن حاوية IOC تقوم بحقن كائن من التطبيق ، وهو كائن يعتمد عليه التطبيق ؛
● ما تم حقنه: هو حقن الموارد الخارجية (بما في ذلك الكائنات والموارد والبيانات الثابتة) المطلوبة لكائن ما.
ما هي العلاقة بين IOC و DI؟ في الواقع ، يتم وصفها من زوايا مختلفة من نفس المفهوم. نظرًا لأن مفهوم انعكاس التحكم غامض نسبيًا (ربما يُفهم أنه مستوى كائنات التحكم في الحاويات ، فمن الصعب التفكير في من سيحافظ على علاقات الأشياء) ، في عام 2004 ، أعطى Master Martin Fowler اسمًا جديدًا: "حقن التبعية". بالمقارنة مع IOC ، فإن "حقن التبعية" يصف بوضوح "يعتمد الكائن المحقن على كائن التبعية لتكوين الحاوية IOC".
لخص
في الواقع ، كل شخص لديه فهمه الخاص لمفهوم الربيع IOC ، وليس هناك إجابة قياسية. الاتجاه العام هو الصحيح.
ما سبق هو كل شيء عن فهم حقن التبعية وانعكاس التحكم في الربيع. آمل أن يكون ذلك مفيدًا للجميع. إذا كانت هناك أي أوجه قصور ، فيرجى ترك رسالة لإشارةها. شكرا لك يا أصدقائك لدعمكم لهذا الموقع!