Sobes.tech
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.