> Какие паттерны проектирования применить для процессора с выбором стратегии обработки по типу события (Go)

Уровень: senior · Роль: backend · Язык: Go · Категория: Технические вопросы

Компании: Wildberries

Стек: Go

> Пример ответа

Для реализации процессора, выбирающего стратегию обработки по типу события, в Go оптимально применить комбинацию паттернов Стратегия (Strategy) и Фабричный метод (Factory Method) или Простая фабрика.

Паттерн Стратегия инкапсулирует алгоритмы обработки в отдельные структуры, реализующие общий интерфейс. Это позволяет динамически подменять поведение процессора.

Фабричный метод (или простая фабрика) отвечает за создание нужной стратегии на основе типа события. Он централизует логику выбора и упрощает добавление новых типов.

Пример на Go:

GO
// Интерфейс стратегии обработки
type EventHandler interface {
Handle(event interface{}) error
}
// Конкретные стратегии
type OrderCreatedHandler struct{}
func (h *OrderCreatedHandler) Handle(event interface{}) error {
// логика обработки создания заказа
return nil
}
type PaymentReceivedHandler struct{}
func (h *PaymentReceivedHandler) Handle(event interface{}) error {
// логика обработки оплаты
return nil
}
// Фабрика стратегий
func GetHandler(eventType string) (EventHandler, error) {
switch eventType {
case "order.created":
return &OrderCreatedHandler{}, nil
case "payment.received":
return &PaymentReceivedHandler{}, nil
default:
return nil, fmt.Errorf("unknown event type: %s", eventType)
}
}
// Процессор событий
type EventProcessor struct{}
func (p *EventProcessor) Process(eventType string, data interface{}) error {
handler, err := GetHandler(eventType)
if err != nil {
return err
}
return handler.Handle(data)
}

Такой подход обеспечивает гибкость (легко добавлять новые типы событий), соблюдение принципа открытости/закрытости (OCP) и чистоту кода. Для более сложных сценариев можно дополнительно применить Цепочку обязанностей (Chain of Responsibility) для последовательной обработки одного события несколькими стратегиями.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью