নির্ভরতা বিপরীতকরণের সাথে কীভাবে নিয়ন্ত্রণের বিবর্তন সম্পর্কিত is


12

ওয়েব জুড়ে অনেক নিবন্ধে বিপরীতকরণের নিয়ন্ত্রণ এবং নির্ভরতা বিপরীতমুখী নীতিটি সংশ্লেষ হিসাবে ব্যবহৃত হয় এবং প্রতিশব্দ হিসাবে ব্যবহৃত হয় (আরও বিভ্রান্তি এমন সরঞ্জামগুলির দ্বারা প্রয়োগ করা হয় যা "ডিআই-কনটেইনারস" এবং "আইওসি-কনটেইনারস" নামে পরিচিত)। উইকিপিডিয়া নিবন্ধটি আইওসি ডিআই-র মতো নয় বলে বোঝানোর চেষ্টা করে একটি দুর্দান্ত কাজ করে:

বিপরীতকরণের নিয়ন্ত্রণ (আইওসি) এমন একটি নকশা বর্ণনা করে যাতে কম্পিউটার প্রোগ্রামের কাস্টম-লিখিত অংশগুলি জেনেরিক, পুনরায় ব্যবহারযোগ্য লাইব্রেরি থেকে নিয়ন্ত্রণের প্রবাহ গ্রহণ করে

সুতরাং ডিআইপি আপনার মডিউলগুলি কংক্রিট বাস্তবায়নের পরিবর্তে বিমূর্তনের উপর নির্ভর করবে।

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

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

সুতরাং, এখানে এমন কিছু প্রশ্ন রয়েছে যা আমি এখনও বের করতে পারি না:

  • আইওসি এবং ডিআইপি-র মধ্যে প্রকৃত সম্পর্ক কী? আইওসি সর্বদা ডিআইপি প্রয়োগের মাধ্যম হিসাবে কাজ করে?
  • নির্ভরতা সমাধানের সরঞ্জামগুলিকে ডিআই এবং আইওসি-ধারক উভয়ই বলা হয় কেন? এটি সূচিত করে যে ডিআই এবং আইওসি একই জিনিস।

দ্রষ্টব্য : এই প্রশ্নটি ডিআই এবং আইওসির মধ্যে পার্থক্য কী তা এর সদৃশ নয় , কারণ পরবর্তীটি নির্ভরতা ইনভার্জেশন নয় , নির্ভরতা ইনজেকশন সম্পর্কে জিজ্ঞাসা করে।



@ জাগান, না এটি নয়, দয়া করে আমার সম্পাদনাটি দেখুন
আন্দ্রে বোর্জেস

সম্মতি জানাই, আমি দুঃখিত যে মিস করেছি
gnat

2
আইএমও, এর সহজ উত্তরটি "তারা একই রকম"। আইওসি নির্ভরতা বিপর্যয়ের অন্য নাম এবং উভয়ই নির্ভরতা ইনজেকশন অর্জনের একটি উপায়। আমি "নির্ভরতা বিপর্যয়কে" গভীরভাবে অস্বাস্থ্যকর শব্দ হিসাবে দেখি কারণ এটি ইঞ্জেকশনে খুব সহজেই বিভ্রান্ত হয়। সুতরাং ডিআই (ইনজেকশন) রয়েছে এবং আইওসি ইনজেকশনের মাধ্যমে নির্ভরতা / নিয়ন্ত্রণের বিপরীত অর্জনের একটি উপায়।
ডেভিড আরনো

উত্তর:


6

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

ডিআই একটি বিষয় কীভাবে নির্ভরতা অর্জন করে সে সম্পর্কে। যখন নির্ভরতা বাহ্যিকভাবে সরবরাহ করা হয়, তখন সিস্টেমটি ডিআই ব্যবহার করে। আইওসি কলটি কে শুরু করে সে সম্পর্কে। যদি আপনার কোডটি কল শুরু করে, এটি আইওসি নয়, যদি ধারক / সিস্টেম / লাইব্রেরি আপনি যে কোডটি দিয়েছিলেন সেই কোডটিতে আবার কল করে, এটি কি আইওসি?

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


2
আইওসি হ'ল কলটি কে শুরু করে - কে কলটি প্ররোচিত করে? আমি যদি লিখি ISomeInterface object = container.Resolve<ISomeInterface>()যে আইওসি নাকি না?
আন্দ্রে বোর্জেস

1
আপনি যা লিখবেন তা হ'ল পরিষেবা লোকেটার প্যাটার্নে একটি প্রয়োগ। এটিও আইওসি। আইওসি নয় আইসোমিস্টারফেস অবজেক্ট = নতুন মাইক্লাস ()। সুতরাং যে কলটি বোঝানো হয়েছে তা হ'ল "তাত্ক্ষণিক কল" (বা যারা 'নতুন' বলে ডাকে)।
Sjoerd222888

1
"অন্যদিকে, ডিআইপি, আপনার কোড থেকে কল করা জিনিসটিতে যে বার্তা পাঠিয়েছে তাতে বিমূর্ততার স্তর সম্পর্কে।" এটা আমার কাছে বাজে কথা মনে হচ্ছে। এতে উল্টোটা কোথায়? তিনি নির্ভরতা বিমূর্ততা বর্ণনা করছেন, বিপরীকরণ নয়।
ডেভিড আরনো

@ ডেভিড আর্নো, আপনি কি বলছেন যে আমরা মার্টিন ফাউলারের ওয়েবসাইটে বিশ্বাস করতে পারি না?
হোল্ডেনম্যাকগ্রোহেন

@ হোল্ডেনম্যাকগ্রোহেন, এটি সম্পর্কে তাঁর মতামত। এটি মার্টিন ফাউলারের কারণে, এটি সত্য করে তোলে না। তিনি অনেক সময় আইএমওতে ভুল হন, যেমন "অ্যানিমিয়া ডেটা মডেল" সম্পর্কিত। অন্য সময়, তার খুব অন্তর্দৃষ্টিপূর্ণ। এই উপলক্ষে আমি ভাবি যে তিনিও ভুল, কারণ এটি বোধগম্য নয়।
ডেভিড আরনো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.