Какие функции выполняет контроллер (Controller) в паттерне MVC?

«Какие функции выполняет контроллер (Controller) в паттерне MVC?» — вопрос из категории Архитектура, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В паттерне Model-View-Controller (MVC) контроллер выступает в роли посредника между пользователем (View), данными и бизнес-логикой (Model). Его основная ответственность — обработка входящих запросов.

Функции контроллера:

  1. Прием входных данных: Получает пользовательский ввод (HTTP-запрос, клик, команду) от слоя представления (View).
  2. Взаимодействие с Model: Вызывает соответствующие методы бизнес-логики в Model для обработки запроса (получение, сохранение, изменение данных).
  3. Выбор View: На основе результата работы Model определяет, какое представление (View) должно отобразить ответ пользователю, и передает ему необходимые данные.

Ключевой принцип: Контроллер не должен содержать бизнес-логику (это задача Model) или логику отображения (это задача View). Он только управляет потоком выполнения.

Пример на Spring MVC:

@Controller // Аннотация Spring, обозначающая класс как контроллер
@RequestMapping("/products")
public class ProductController {
    @Autowired
    private ProductService productService; // Ссылка на слой Model (Сервис)

    @GetMapping("/{id}")
    public String getProduct(@PathVariable Long id, Model model) {
        // 1. Взаимодействие с Model: получение данных
        Product product = productService.findById(id);
        // 2. Подготовка данных для View
        model.addAttribute("product", product);
        // 3. Выбор View: возвращает имя шаблона Thymeleaf/HTML
        return "product-details";
    }
}

Итог: Контроллер обрабатывает запрос GET /products/123, получает продукт из Model, передает его в View product-details.html и завершает свою работу.