Dependency Inversion Principle


Dependency Inversion Principle হচ্ছে  হাই লেভেল মডিউলকে লো লেভেল মডিউলের উপর সরাসরি  ডিপেন্ডেন্ট করে ফেলা যাবে না। তারা একটা এবসট্রাক জিনিষ দিয়ে একে অপরের সাথে  সংযুক্ত থাকবে। 

public class Vehicle {
   public Engine engine;
   public Vehicle() {
      this.engine = new Engine();
   }
}

এখানে  হাই লেভেল Vehicle ক্লাস সরাসরি লো লেভেল Engine ক্লাস এর উপর নির্ভরশীল। এর সমস্যা হচ্ছে, যদি আমরা কোনো কারণে Engine পরিবর্তন করতে চাই, তাহলে  Vehicle  ক্লাসে পরিবর্তন করে কাজটা করতে হবে। এর পরিবর্তে আমরা Engine কে একটা  ইন্টারফেস করে এবসট্রাক লেয়ার তৈরি করতে পারি।, তাহলে  Vehicle নির্ভর করবে Engine ইন্টারফেসের উপর। এর ফলে সুবিধা হবে, আমরা যেকোন সময় Engine এর ইমপ্লিমেন্টেশন পরিবর্তন করতে পারব কিন্তু Vehicle ক্লাসে হাত দেয়া লাগবে না। 


public class Vehicle {
   public Engine engine;
   public Vehicle(Engine e) {
      this.engine = e;
   }
}

public interface Engine{ }

public class FlatEngine implements Engine { }

public class InlineEngine implements Engine { }
এখানে Vehicle ক্লাস Engine ইন্টারফেসের উপর নির্ভরশীল যা এবস্ট্রাক্ট।