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 ইন্টারফেসের উপর নির্ভরশীল যা এবস্ট্রাক্ট।