Sobes.tech
Back to questions
Junior — Middle
54

В чем заключается назначение принципа инверсии зависимостей в разработке программного обеспечения?

Companies where asked
РунитиРунити

Answer from AI

sobes.tech AI

Принцип инверсии зависимостей (Dependency Inversion Principle) заключается в том, что высокоуровневые модули не должны зависеть от низкоуровневых, оба должны зависеть от абстракций. Абстракции не должны зависеть от деталей, а детали должны зависеть от абстракций. Это позволяет снизить связанность компонентов, повысить гибкость и облегчить тестирование.

Например, вместо того чтобы класс напрямую создавал объект конкретного класса, он зависит от интерфейса, а конкретная реализация передаётся извне (через конструктор или сеттер):

from abc import ABC, abstractmethod

class IDataFetcher(ABC):
    @abstractmethod
    def fetch(self):
        pass

class ApiFetcher(IDataFetcher):
    def fetch(self):
        return "данные из API"

class DataProcessor:
    def __init__(self, fetcher: IDataFetcher):
        self.fetcher = fetcher

    def process(self):
        data = self.fetcher.fetch()
        print(f"Обработка {data}")

fetcher = ApiFetcher()
processor = DataProcessor(fetcher)
processor.process()

Такой подход облегчает замену реализаций и тестирование с моками.