Для чего нужна инверсия зависимостей

Python Junior Рунити
Для чего нужна инверсия зависимостей
Ответы
Инверсия зависимостей (Dependency Inversion Principle, DIP) — один из принципов SOLID, который гласит, что модули верхнего уровня не должны зависеть от модулей нижнего уровня. Оба должны зависеть от абстракций. Абстракции не должны зависеть от деталей, детали должны зависеть от абстракций. **Зачем нужна:** - Уменьшает связанность кода. - Упрощает тестирование (можно подменять зависимости моками). - Делает код более гибким и расширяемым. **Пример без DIP:** ``` class LightBulb: def turn_on(self): print("LightBulb: turned on") class Switch: def __init__(self): self.bulb = LightBulb() # Жёсткая зависимость def operate(self): self.bulb.turn_on() ``` **Пример с DIP:** ``` from abc import ABC, abstractmethod class Switchable(ABC): @abstractmethod def turn_on(self): pass class LightBulb(Switchable): def turn_on(self): print("LightBulb: turned on") class Switch: def __init__(self, device: Switchable): # Зависимость от абстракции self.device = device def operate(self): self.device.turn_on() ``` Теперь `Switch` зависит от абстракции `Switchable`, а не от конкретной реализации `LightBulb`. Это позволяет легко добавлять новые устройства (например, `Fan`) без изменения кода `Switch`.