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()
Такой подход облегчает замену реализаций и тестирование с моками.