Sobes.tech
Back to questions
Junior — Middle
77

Можете объяснить суть принципа Dependency Inversion Principle (DIP)?

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"Saving {data} to MySQL")

class UserService:
    def __init__(self, db: Database):
        self.db = db

    def add_user(self, user):
        self.db.save(user)

# Использование
mysql_db = MySQLDatabase()
service = UserService(mysql_db)
service.add_user("John")

Здесь UserService зависит от абстракции Database, а не от конкретной реализации MySQLDatabase.