Что такое контроллер в чистой архитектуре

«Что такое контроллер в чистой архитектуре» — вопрос из категории Архитектура, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Контроллер в чистой архитектуре — это слой, отвечающий за обработку входящих HTTP-запросов и преобразование их в вызовы Use Case. Он не содержит бизнес-логики, а лишь:

  1. Валидирует входные данные
  2. Конвертирует DTO в доменные модели
  3. Вызывает соответствующий Use Case
  4. Преобразует результат в HTTP-ответ

Пример на Go:

type UserController struct {
    createUser usecase.CreateUser
}

func (c *UserController) CreateUser(w http.ResponseWriter, r *http.Request) {
    var req CreateUserRequest
    if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
        http.Error(w, "invalid request", http.StatusBadRequest)
        return
    }

    user, err := c.createUser.Execute(r.Context(), req.ToDomain())
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }

    json.NewEncoder(w).Encode(UserResponseFromDomain(user))
}

Контроллер зависит от Use Case, но не наоборот, что сохраняет направление зависимостей наружу к фреймворкам.