"ইন্টারফেস থেকে একটি প্রোগ্রাম" এর অর্থ আপনার কাজটি করার জন্য কোনও কংক্রিটের ধরণের উপর নির্ভর করবে না , তবে আপনাকে কীভাবে আপনার নির্ভরতা পেতে হবে তা নির্দিষ্ট করে না ।
"ডিপেন্ডেন্সি ইনভার্সন প্রিন্সিপাল" বলছে যে কোনও বস্তুর তার নির্ভরতাগুলি তৈরি করা নিয়ন্ত্রণ করা উচিত নয়, এটি কেবল তার কী নির্ভরতা প্রয়োজন তা বিজ্ঞাপন দেওয়া উচিত এবং কলকারী এটি সরবরাহ করতে দেয় । তবে এটি নির্ভর করে না যে নির্ভরতাটি কোনও কংক্রিটের ধরন বা ইন্টারফেস হতে হবে।
আমি কিছু সি # কোড দিয়ে পার্থক্য বর্ণনা করব।
নিম্নলিখিত উদাহরণটি একটি কংক্রিটের ধরণের উপর নির্ভর করে এবং এটি নিজস্ব নির্ভরতার সৃষ্টি নিয়ন্ত্রণ করে। এটি "প্রোগ্রামকে একটি ইন্টারফেসে" বা "নির্ভরতা বিপরীতে" অনুসরণ করে না :
public class ThingProcessor
{
MyThing _myThing;
public ThingProcessor()
{
_myThing = new MyThing();
}
public void DoSomething()
{
_myThing.DoIt();
}
}
নিম্নলিখিত উদাহরণটি একটি ইন্টারফেসের উপর নির্ভর করে, তবে এটি নিজস্ব নির্ভরতার সৃষ্টি নিয়ন্ত্রণ করে। এটি "প্রোগ্রামটিকে একটি ইন্টারফেসে" অনুসরণ করে তবে "নির্ভরতা বিপরীতমুখীকরণ" নয়:
public class ThingProcessor
{
IMyThing _myThing;
public ThingProcessor()
{
_myThing = ThingFactory.GiveMeANewMyThing();
}
public void DoSomething()
{
_myThing.DoIt();
}
}
নিম্নলিখিত উদাহরণটি একটি কংক্রিটের ধরণের উপর নির্ভর করে তবে এটি এর নির্ভরতা তৈরি করতে এবং এটিতে প্রেরণের জন্য বলে। এটি "নির্ভরতা বিপর্যয়" অনুসরণ করে, তবে "ইন্টারফেসে প্রোগ্রাম" নয়:
public class ThingProcessor
{
MyThing _myThing;
public ThingProcessor(MyThing myThing)
{
_myThing = myThing;
}
public void DoSomething()
{
_myThing.DoIt();
}
}
নিম্নলিখিত উদাহরণটি একটি ইন্টারফেসের উপর নির্ভর করে এবং এটি এর নির্ভরতা তৈরি করতে এবং এটিতে প্রেরণের জন্য বলে। এটি "নির্ভরতা বিপর্যয়" এবং "একটি ইন্টারফেসে প্রোগ্রাম " উভয়কে অনুসরণ করে :
public class ThingProcessor
{
IMyThing _myThing;
public ThingProcessor(IMyThing myThing) // using an interface
{
_myThing = myThing;
}
public void DoSomething()
{
_myThing.DoIt();
}
}