ডিপেন্ডেন্সি ইনজেকশন (ডিআই) এবং নিয়ন্ত্রণের বিপরীতমুখী (আইওসি) এর মধ্যে পার্থক্য


117

আমি ডিপেন্ডেন্সি ইনজেকশন (ডিআই) এবং ইনভার্শন অফ কন্ট্রোলের (আইওসি) অনেকগুলি রেফারেন্স দেখতে পেয়েছি, তবে তাদের মধ্যে কোনও পার্থক্য আছে কি না তা সত্যই আমি জানি না।

আমি তাদের দুটি বা দুটি ব্যবহার শুরু করতে চাই, তবে তারা কীভাবে আলাদা তা সম্পর্কে আমি কিছুটা বিভ্রান্ত।


নিয়ন্ত্রণের বিপরীতটি সাধারণত "পাত্রে" বোঝায় তবে নির্ভরতা ইনজেকশন প্রকৃত প্যাটার্নকে বোঝায়। তবে তারা একসাথে চলে যায়। আমি এই বিষয়ে একটি হ্যান্ডেল পেতে মার্টিন ফোলারের নিবন্ধটি পড়ার পরামর্শ দেব ।
বেন হফস্টিন

ডিপেন্ডেন্সি ইনজেকশন এমন একটি জিনিস যা আপনি করেন, যা ইনভার্শন অফ কন্ট্রোল নামে একটি কমান্ড কাঠামোর দিকে নিয়ে যায়। এগুলি সহজাতভাবে যুক্ত।

2
ডিআই আইওসি-র একটি রূপ, আমি এই উত্তরে

2
আমি বলব যে ডিআই আইওসি-র একটি বিশেষ মামলা। Ditionতিহ্যগত নিয়ন্ত্রণ মডিউল-> মডিউল ম্যানেজার থেকে অনুরোধ মডিউল যায়, ডিআইতে এটি মডিউল ম্যানেজারে উল্টানো হয় -> মডিউল থেকে অনুরোধিত নির্ভরতা পান।
রাফা ডগির্ড

সুতরাং অন্য কথায়, মূলত আইওসি হ'ল ডিআই ব্যবহারের একটি বাস্তবায়ন। আমি কি এটি সঠিকভাবে পাচ্ছি?
নাচ

উত্তর:


53

সংজ্ঞা

অ্যাপ্লিকেশন ফ্রেমওয়ার্ক কোড থেকে কংক্রিট বাস্তবায়ন সম্পর্কে সচেতনতা হ্রাস এবং আপনার আবেদনের ডোমেন নির্দিষ্ট উপাদানগুলিকে আরও নিয়ন্ত্রণ দেওয়ার লক্ষ্যে নিয়ন্ত্রণের বিপরীতকরণ একটি নকশার দৃষ্টান্ত। একটি traditionalতিহ্যবাহী শীর্ষ ডাউন ডিজাইন করা সিস্টেমে, অ্যাপ্লিকেশনটির লজিক্যাল প্রবাহ এবং নির্ভরতা সচেতনতা শীর্ষ উপাদানগুলি থেকে প্রবাহিত হয়, এটি প্রথম ডিজাইন করা হয়, শেষগুলি ডিজাইন করা হয়েছে। এই হিসাবে, নিয়ন্ত্রণের বিপরীতকরণ একটি প্রয়োগের নিয়ন্ত্রণ এবং নির্ভরতা সচেতনতার প্রায় আক্ষরিক বিপরীত।

নির্ভরতা ইনজেকশন এমন একটি প্যাটার্ন যা ক্লাসগুলির উদাহরণ তৈরি করতে ব্যবহৃত হয় যা অন্যান্য ক্লাসগুলি সঙ্কলনের সময় না জেনে নির্ভর করে যা বাস্তবায়ন সেই কার্যকারিতা সরবরাহ করতে ব্যবহৃত হবে।

একসাথে কাজকরা

নিয়ন্ত্রণের বিপরীততা নির্ভরতা ইনজেকশনটি ব্যবহার করতে পারে কারণ নির্দিষ্ট কার্যকারিতা সরবরাহকারী উপাদানগুলি তৈরি করার জন্য একটি প্রক্রিয়া প্রয়োজন। অন্যান্য বিকল্প বিদ্যমান এবং ব্যবহার করা হয়, যেমন অ্যাক্টিভেটর, কারখানা পদ্ধতি, ইত্যাদি, তবে ফ্রেমওয়ার্কগুলিতে সেইগুলি ইউটিলিটি ক্লাসগুলি উল্লেখ করার দরকার নেই যখন ফ্রেমওয়ার্ক ক্লাসগুলি পরিবর্তে তাদের প্রয়োজনীয়তা (ies) গ্রহণ করতে পারে।

উদাহরণ

কর্মক্ষেত্রে এই ধারণাগুলির একটি উদাহরণ হ'ল রিফ্লেক্টরের প্লাগ-ইন ফ্রেমওয়ার্ক । অ্যাপ্লিকেশনটি সংকলনের সময় প্লাগ-ইনগুলি সম্পর্কে কিছুই জানত না যদিও প্লাগ-ইনগুলি সিস্টেমের নিয়ন্ত্রণের একটি দুর্দান্ত কাজ করে। সেই প্লাগইনগুলির প্রত্যেকটির জন্য একটি একক পদ্ধতি কল করা হয়, মেমরিটি সার্ভিস দিলে শুরু করুন যা প্লাগ-ইনগুলিতে নিয়ন্ত্রণ চলে। ফ্রেমওয়ার্কটি জানে না যে তারা কী করবে, এটি কেবল তাদের এটি করতে দেয়। মূল প্রয়োগ থেকে নিয়ন্ত্রণ নেওয়া হয়েছে এবং নির্দিষ্ট কাজটি করার জন্য উপাদানটিকে দেওয়া হয়েছে; নিয়ন্ত্রণ বিপর্যয়.

অ্যাপ্লিকেশন কাঠামোটি বিভিন্ন পরিষেবা সরবরাহকারীর মাধ্যমে এর কার্যকারিতা অ্যাক্সেসের অনুমতি দেয়। প্লাগ-ইনটি পরিষেবা তৈরির সময় সরবরাহকারীদের উল্লেখ করা হয়। এই নির্ভরতাগুলি প্লাগ-ইনকে তার নিজস্ব মেনু আইটেম যুক্ত করতে দেয়, ফাইলগুলি কীভাবে প্রদর্শিত হয় তা পরিবর্তন করতে পারে, উপযুক্ত প্যানেলে নিজস্ব তথ্য প্রদর্শন করতে পারে ইত্যাদি etc. কোড যতক্ষণ চুক্তি অক্ষত থাকবে।

সেই সময় কনফিগারেশন তথ্য, প্রতিবিম্ব এবং অ্যাক্টিভেটর অবজেক্ট (অন্তত। নেট) মধ্যে প্লাগ-ইনগুলি তৈরি করতে একটি কারখানা পদ্ধতি ব্যবহৃত হত was আজ, এমন একটি সরঞ্জাম রয়েছে, যার জন্য এমইএফ রয়েছে , যা নির্ভরযোগ্যতা হিসাবে প্লাগইনগুলির একটি তালিকা গ্রহণের জন্য অ্যাপ্লিকেশন ফ্রেমওয়ার্কের ক্ষমতা সহ নির্ভরতাগুলি ইনজেকশনের সময় বিকল্পগুলির বিস্তৃত পরিসরের জন্য অনুমতি দেয়।

সারাংশ

যদিও এই ধারণাগুলি ব্যবহার করা যেতে পারে এবং স্বাধীনভাবে উপকারগুলি সরবরাহ করা যায়, তারা একসাথে অনেক বেশি নমনীয়, পুনরায় ব্যবহারযোগ্য এবং পরীক্ষামূলক কোডটি লেখার অনুমতি দেয়। এর মতো, অবজেক্ট ওরিয়েন্টেড সলিউশন ডিজাইনের ক্ষেত্রে এগুলি গুরুত্বপূর্ণ ধারণা।


3
না, আইওসি একটি পুরানো ধারণা এবং এটি ডিআই-র থেকে স্বতন্ত্র (যা আইওসির উপর নির্ভর করে না)। উদাহরণস্বরূপ, স্ট্রুটস ফ্রেমওয়ার্ক (জাভা) নিন: এটি আইওসির উপর অনেক বেশি নির্ভর করে, তবে ডিআই-র কোনও ব্যবহার করে না।
রোজিরিও

1
@ রোগারিও - আপনি একটি ভাল বক্তব্য রেখেছেন যে দুটি ধারণাটি একে অপরের প্রয়োজন হয় না। আমি তা স্পষ্ট করার জন্য আমার উত্তর আপডেট করেছি এবং তারপরে দ্রুত বর্ণনা করব যে কিছু ফ্রেমওয়ার্কগুলি কীভাবে আরও আলগাভাবে মিশ্রিত কোডের জন্য অনুমতি দেয় use
চক

আইওসি-র সবচেয়ে সহজ অ্যাপ্লিকেশনটি সম্ভবত অ্যাকশনলিস্টনার হবে। প্রক্রিয়াগতভাবে কোডটি পরিচালনা করার পরিবর্তে ইভেন্ট হ্যান্ডলিং কোডটি কাস্টম কোডে প্রেরণ করা হয়। এর মাধ্যমে নিয়ন্ত্রণটি উল্টানো হচ্ছে।
মাইকে

0

আইওসি এবং ডিআইআই http://martinfowler.com/articles/inication.html বোঝার জন্য ভাল নিবন্ধ

আইওসি (নিয়ন্ত্রণের বিপরীতমুখী)

আইওসি মানে

  1. ইন্টারফেসে কোডিং (একটি উপাদান অন্য উপাদানগুলির ইন্টারফেসের উপর নির্ভর করবে এবং ইমপ্লের উপর নয়), এবং যেমন

    interface iComp_2 {...}
    
    class Comp_1 {
        iComp_2 c2 = ….;
    }
    
  2. উপাদান বাস্তবায়ন নির্দিষ্ট কোড যেমন অপসারণ

    Comp_1 {
        iComp_2 c2 = getComp_2_Impl(); // not new Comp_2_Impl();
    }
    

আইওসি নিম্নলিখিত যে কোনও একটি দ্বারা অর্জন করা যেতে পারে:

1. ডিআই (নির্ভরতা ইনজেকশন)

3 types of DI

1.1 Constructor Injection

1.2 Setter Injection

1.3 Interface Injection

2. পরিষেবা লোকেটার

ডিআই (নির্ভরতা ইনজেকশন) ধারক

রানটাইম প্রেরণা নির্ধারণ এবং সময় সংকলন নয়: রানটাইম স্থিত করে যা কোন কনফিগার ফাইলের উপর ভিত্তি করে কোন ইন্টারফেসের কংক্রিট প্রয়োগ করা হবে (তাই সংকলনের সময় আমরা জানি না যে কোন ইমপ্ল ব্যবহার করা হবে এবং সুতরাং অ্যাপ্লিকেশনটির কনফিগারেশনে বাড়ে) । এটি এমন একটি বাস্তবায়ন যেখানে বিভিন্ন মডিউলগুলির মধ্যে কংক্রিটের সম্পর্ক "রান টাইম" এ স্থির করা হয়।

নির্ভরতা ইনজেকশনের পরে ইমপ্লের ইনস্ট্যান্টেশন: ইমপ্লিটটি নির্ধারণের পরে, এটি ইমপ্লান্টটি ইনস্ট্যান্ট করে প্রথমে তার সমস্ত নির্ভরতা (কনফিগ ফাইলে উল্লিখিত) তৈরি করে এবং তারপরে সেই নির্ভরতা ইনজেক্ট করে ing

দৃষ্টান্ত লাইফ-চক্র পরিচালনা: ডিআই পাত্রে সাধারণত জীবনচক্র পরিচালনা করার জন্য প্রয়োজনীয় জিনিসগুলির জন্য একটি রেফারেন্স রাখে বা ভবিষ্যতের ইনজেকশনগুলির জন্য যেমন সিঙ্গেলন বা ফ্লাইওয়েটের জন্য পুনরায় ব্যবহৃত হয়। ধারকটিতে প্রতিটি কলের জন্য কিছু উপাদানগুলির নতুন দৃষ্টান্ত তৈরি করতে কনফিগার করা হলে, ধারক সাধারণত তৈরি বস্তুর সম্পর্কে ভুলে যায়। অন্যথায় আবর্জনা সংগ্রাহক যখন আর ব্যবহার না করা হয় তখন এই সমস্ত বস্তু সংগ্রহ করতে কঠোর সময় পেত।


6
আপনি কি সত্যিই "ইনজেকশন" নিবন্ধটি পড়েছেন? আইওসি নেই না মানে কি এই উত্তরটি বলছেন, না এ সব।
রোজারিও

-3

আমি বলব "ইনভার্শন অফ কন্ট্রোল" এমন একটি সিস্টেম ডিজাইন করার একটি উপায় যেখানে সমস্ত মডিউলগুলি বিমূর্ত সংস্থাগুলির কথা ভাবা হয়।

এবং, "ডিপেন্ডেন্সি ইনজেকশন" এমন একটি বাস্তবায়ন যেখানে বিভিন্ন মডিউলগুলির মধ্যে কংক্রিটের সম্পর্ক "রান টাইম" এ স্থির করা হয়।


-4

নিয়ন্ত্রণের বিপরীতকরণ একটি সাধারণ ধারণা, কার্যকরী ভাষায় সাধারণত ধারাবাহিকতা ব্যবহার করে করা হয়। এটি আপনাকে এমন একটি API লিখতে দেয় যেখানে উভয় পক্ষই 'কলার' এবং কোনওটিই 'কলি' নয়। অন্যদিকে, আরও স্থির পরিবেশে আপনার এই দক্ষতা নেই, তাই নিয়ন্ত্রণ প্রবাহে ইঙ্গিতগুলি সন্নিবেশ করানোর জন্য আপনার এই হ্যাকের প্রয়োজন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.