Struchkov Mark
1536a6c68c
All checks were successful
continuous-integration/drone/push Build is passing
2.7 KiB
2.7 KiB
aliases | tags | date | zero-link | parents | linked | |||||
---|---|---|---|---|---|---|---|---|---|---|
|
|
2024-09-27 |
|
|
Высокоуровневые модули не должны зависеть от низкоуровневых модулей. Оба должны зависеть от абстракций. Это означает, что классы не должны напрямую зависеть от конкретных реализаций, вместо этого они должны работать с абстракциями (интерфейсами или абстрактными классами). Это делает код гибким и легко расширяемым.
- Пример нарушения DIP: Высокоуровневый модуль напрямую использует конкретный класс, что приводит к жёсткой связности.
- Решение: Заменить зависимости на интерфейсы и внедрять зависимости через инверсии (например, через конструктор или контейнеры зависимостей).
public class Lamp {
public void turnOn() {
// Лампа включена
}
}
public class Switch {
private Lamp lamp;
public Switch(Lamp lamp) {
this.lamp = lamp;
}
public void toggle() {
lamp.turnOn(); // Нарушение DIP — жесткая зависимость от класса Lamp
}
}
Исправление с использованием интерфейсов:
public interface Switchable {
void turnOn();
}
public class Lamp implements Switchable {
public void turnOn() {
// Лампа включена
}
}
public class Switch {
private Switchable device;
public Switch(Switchable device) {
this.device = device;
}
public void toggle() {
device.turnOn(); // Теперь зависимость инверсирована — Switch зависит от абстракции
}
}
Мета информация
Область:: ../../meta/zero/00 Архитектура ПО Родитель:: SOLID Источник:: Создана:: 2024-09-27 Автор::