Как бы вы спроектировали этот код для использования в разных транспортных протоколах (gRPC, HTTP, консюмер)?
Ответ от нейросети
sobes.tech AI
Для поддержки разных транспортных протоколов (gRPC, HTTP, консюмер) стоит выделить абстракции и разделить логику:
-
Интерфейс бизнес-логики — отдельный слой, который не зависит от протокола. Например, интерфейс с методами для обработки запросов.
-
Адаптеры для транспортов — отдельные реализации, которые принимают запросы из конкретного протокола, преобразуют их в формат бизнес-логики и вызывают соответствующие методы.
-
Обработка ошибок и сериализация — каждый адаптер отвечает за преобразование ошибок и данных в формат, понятный клиенту протокола.
Пример интерфейса:
// Service описывает бизнес-логику
type Service interface {
ProcessRequest(ctx context.Context, req Request) (Response, error)
}
Для gRPC создаём сервер, который вызывает Service.ProcessRequest.
Для HTTP — HTTP-хендлер, который парсит JSON, вызывает ProcessRequest и возвращает JSON.
Для консюмера — обработчик сообщений, который десериализует сообщение, вызывает ProcessRequest и отправляет ответ.
Такой подход позволяет переиспользовать бизнес-логику без дублирования и легко добавлять новые протоколы.