Встречается на собеседованиях • сегодня

В чем различия Service Locator и Dependency Injection

Service Locator и Dependency Injection (DI) — это два паттерна для управления зависимостями, но работают они по-разному.

Service Locator — это контейнер, который хранит сервисы и предоставляет их по запросу. Клиент явно запрашивает зависимости, что может скрывать реальные зависимости класса.

python
class ServiceLocator:
    _services = {}
    
    @classmethod
    def register(cls, name, service):
        cls._services[name] = service
    
    @classmethod
    def get(cls, name):
        return cls._services[name]

locator = ServiceLocator()
locator.register('db', Database())
db = locator.get('db') # Явный запрос зависимости

text

**Dependency Injection** — зависимости передаются классу извне (через конструктор, методы или свойства). Это делает зависимости явными и упрощает тестирование.  

```python
class UserService:
    def __init__(self, db):
        self.db = db  # Зависимость инжектируется

db = Database()
user_service = UserService(db)  # DI через конструктор

Ключевое отличие:

  • Service Locator скрывает зависимости (клиент их запрашивает).
  • DI делает зависимости явными (внешний код их передает).

DI предпочтительнее, так как он прозрачнее и лучше подходит для тестирования.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы