Пользуешься ли принципом инверсии зависимостей (Dependency Inversion Principle)
Python
Senior
Без компании
Пользуешься ли принципом инверсии зависимостей (Dependency Inversion Principle)
Ответы
Dependency Inversion Principle (DIP) — один из SOLID принципов, который гласит:
- Модули верхнего уровня не должны зависеть от модулей нижнего уровня. Оба должны зависеть от абстракций.
- Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.
**Пример без DIP:**
```
class LightBulb:
def turn_on(self):
print("LightBulb: turned on")
class Switch:
def __init__(self, bulb: LightBulb):
self.bulb = bulb
def operate(self):
self.bulb.turn_on()
```
Здесь `Switch` жестко зависит от `LightBulb`.
**С 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`), а не от конкретной реализации. Это упрощает расширение (например, добавление `Fan` без изменения `Switch`).
Использование DIP делает код гибче, тестируемее и легче для масштабирования.