Как бы вы спроектировали этот код для использования в разных транспортных протоколах (gRPC, HTTP, консюмер)?

Для поддержки разных транспортных протоколов (gRPC, HTTP, консюмер) стоит выделить абстракции и разделить логику:

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

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

Для поддержки разных транспортных протоколов (gRPC, HTTP, консюмер) стоит выделить абстракции и разделить логику:

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

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

Для поддержки разных транспортных протоколов (gRPC, HTTP, консюмер) стоит выделить абстракции и разделить логику:

  1. Интерфейс бизнес-логики — отдельный слой, который не зависит от протокола. Например, интерфейс с методами для обработки запросов.
  2. Адаптеры для транспортов — отдельные реализации, которые принимают запросы из конкретного протокола, преобразуют их в формат бизнес-логики и вызывают соответствующие методы.
  3. Обработка ошибок и сериализация — каждый адаптер отвечает за преобразование ошибок и данных в формат, понятный клиенту протокола.

Пример интерфейса:

// Service описывает бизнес-логику
type Service interface {
    ProcessRequest(ctx context.Context, req Request) (Response, error)
}

Для gRPC создаём сервер, который вызывает Service.ProcessRequest. Для HTTP — HTTP-хендлер, который парсит JSON, вызывает ProcessRequest и возвращает JSON. Для консюмера — обработчик сообщений, который десериализует сообщение, вызывает ProcessRequest и отправляет ответ.

Такой подход позволяет переиспользовать бизнес-логику без дублирования и легко добавлять новые протоколы.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку