Оптимизация взаимодействия менеджера с рабочими объектами

Supervisor создаёт два конкретных worker и последовательно вызывает process. Внедрение списка исполнителей через конструктор убирает жёсткую привязку и позволяет подставлять тестовые реализации.

Короткий ответ

Что ответить на собеседовании

Supervisor создаёт два конкретных worker и последовательно вызывает process. Внедрение списка исполнителей через конструктор убирает жёсткую привязку и позволяет подставлять тестовые реализации.

Подробный разбор

Ответ с пояснениями

Условие

Вопрос: что делает представленный фрагмент и какие способы его улучшения возможны? В коде класс Supervisor (ранее Manager) создаёт два рабочих экземпляра — WorkerA и WorkerB (ранее Worker1 и Worker2) — и последовательно вызывает у каждого из них метод process. Нужно проанализировать текущую реализацию и предложить варианты повышения читаемости, расширяемости и тестируемости кода.

class WorkerA:
    def __init__(self):
        pass
    def process(self):
        pass

class WorkerB:
    def __init__(self):
        pass
    def process(self):
        pass

class Supervisor:
    def __init__(self):
        self.w1 = WorkerA()
        self.w2 = WorkerB()

    def run_jobs(self):
        for w in (self.w1, self.w2):
            w.process()

s = Supervisor()
s.run_jobs()

Ответ

Supervisor создаёт два конкретных worker и последовательно вызывает process. Внедрение списка исполнителей через конструктор убирает жёсткую привязку и позволяет подставлять тестовые реализации.

Пример композиции:

class Supervisor:
    def __init__(self, workers):
        self.workers = tuple(workers)

    def run_jobs(self):
        for worker in self.workers:
            worker.process()

supervisor = Supervisor([WorkerA(), WorkerB()])
supervisor.run_jobs()

Пустые init в worker можно убрать. Общий process выражается через Protocol/ABC или обычную duck typing. Нужно явно решить, останавливает ли ошибка одного worker остальные. Параллельный запуск не является автоматическим улучшением: он может изменить порядок и нарушить зависимости между работами.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее