Я читал о твердых принципах ООП (Принцип инверсии зависимостей) и не совсем понял, как это работает.
Когда один класс явно знает о конструкции и реализации другого класса, изменения в одном классе повышают риск нарушения работы другого класса.
скажем, у меня есть студент, который зависит от курса, если я изменю курс, как это повлияет на студента. То же самое - использовать DI. Я имею в виду, что DI заменяет новый оператор, и что тогда? студент по-прежнему зависит от курса
вы можете привести несколько примеров, пожалуйста.
спасибо
public class Student {
.....
private Course course = new Course();
}
обновлено 1
(сценарий), если я предполагаю, что у класса есть только конструктор по умолчанию, и он никогда не будет использовать какие-либо переменные экземпляра для создания экземпляра, например new Course(name, .......)
обновлено 2
Пример
public class Copy {
@Autowired
private Writer writer;
.....
}
public interface Writer{
void write();
}
public class PrinterWriter implements Writer {
.....
}
public class DiskWriter implements Writer {
....
}
Теперь происходит то, что нашему модулю копирования нужно знать о принтере и диске. Вы можете представить себе те волшебные операторы if-else, которые приходят нам на помощь в таких ситуациях. По мере появления новых требований вы, вероятно, добавляете все больше и больше зависимостей в этот модуль копирования. В конце концов, вы получите очень сложный, трудный в обслуживании и трудный для понимания дизайн.
Можете ли вы показать в этом примере, где именно инверсия зависимостей исключает использование волшебных операторов if-else с простым примером, пожалуйста