Back to questions
Junior — Middle
61
Могли бы вы объяснить, что означает принцип инверсии зависимостей в контексте проектирования программных систем?
Answer from AI
sobes.tech AI
Принцип инверсии зависимостей (Dependency Inversion Principle, DIP) — это один из пяти принципов SOLID, который гласит:
- Модули верхнего уровня не должны зависеть от модулей нижнего уровня. Оба должны зависеть от абстракций.
- Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.
Проще говоря, вместо того чтобы конкретные классы напрямую создавали или использовали другие конкретные классы, они должны работать через абстрактные интерфейсы или базовые классы. Это повышает гибкость и облегчает тестирование.
Пример на Python:
from abc import ABC, abstractmethod
class Database(ABC):
@abstractmethod
def save(self, data):
pass
class MySQLDatabase(Database):
def save(self, data):
print(f"Сохраняем {data} в MySQL")
class DataManager:
def __init__(self, db: Database):
self.db = db
def save_data(self, data):
self.db.save(data)
# Использование
mysql_db = MySQLDatabase()
data_manager = DataManager(mysql_db)
data_manager.save_data("данные")
Здесь DataManager зависит от абстракции Database, а не от конкретной реализации MySQLDatabase. Это позволяет легко менять реализацию базы данных без изменения DataManager.