> Какие паттерны проектирования применить для процессора с выбором стратегии обработки по типу события (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{}, nilcase "payment.received":return &PaymentReceivedHandler{}, nildefault: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) для последовательной обработки одного события несколькими стратегиями.
> Похожие задачи по Go
Что такое файловые ссылки в Linux
Что такое NAT и как работает механизм NAT
Есть ли смысл объявлять мапу в конструкторе в Go вместо объявления переменной
Какие проблемы могут возникнуть при возвращении внутренней мапы напрямую в Go
> Похожие задачи по backend
Что такое файловые ссылки в Linux
Что такое NAT и как работает механизм NAT
Есть ли смысл объявлять мапу в конструкторе в Go вместо объявления переменной
Какие проблемы могут возникнуть при возвращении внутренней мапы напрямую в Go
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью