@Sinus_314

Почему толстые контроллеры – это плохо?

Всем привет!

Я пишу небольшие проекты на laravel и как многие начинающие разработчики закидываю логику в контроллеры. Но маленьких проектах, которые нужно быстро сделать и сдать это не вызывает никаких проблем, но сейчас я сажусь за серьезный проект, который буду пилить пару месяцев и сделать его хочется хорошо.

Я много раз читал и слышал, что толстые контроллеры – это ужасно, это антипаттерн, но не могу уразуметь почему. Валидация мы вынесли в Request, Вся логика обращения в БД в модели или репозитории, что остается в контроллере? одна строчка возвращающая view? Тогда зачем контроллеру вообще существовать, закинуть эту строку в роуты и все. В чем проблема написать в контроллере пару where, join, мб как-то по хитрому обработать данные?

Ну и предположим, что я осознал, почему в контроллерах логики быть не должно. Тогда просто переносим все в модель? зачем плодить репозитории (кроме как абстрагироваться от конкретной ORM) и остальные сущности?

Заранее всем спасибо за внимание и ответы!)
  • Вопрос задан
  • 192 просмотра
Решения вопроса 2
JhaoDa
@JhaoDa
LaravelRUS Team
В чем проблема написать в контроллере пару where, join, мб как-то по хитрому обработать данные?
Завтра появится задача сделать всё то же самое, но в консоли. Потащищ копипасту или начнёшь выносить общий код в реквесты, репозитории и прочие места?

Тогда просто переносим все в модель? зачем плодить репозитории (кроме как абстрагироваться от конкретной ORM) и остальные сущности?
Репозитории актуальны с паттерном DM и не актуальны с паттерном AR.

При всём при этом следует помнить, что паттерны — не догмы. Паттеры для человека, а не человек для паттернов. Если у тебя одностраничник на хайповую тему, который надо сделать быстро и жить ему месяца два, то не парься и пиши всё в контроллерах. Выживет — перепишешь.
Ответ написан
@Akela_wolf
Extreme Programmer
Если строго следовать принципам SOLID, а именно SRP (принцип единственной ответственности), то задачей контроллера является презентовать какую-то часть приложения в виде HTTP endpoint (в частном случае REST).

Собственно логика не должна находиться в контроллере, потому что способы обращения к этой логике (через HTTP, Service Bus, Telegram, Discord, периодический вызов по крону и т.д.) ортогональны собственно бизнес-логике.

Но это становится действительно критично в сложных проектах. В типичных сайтах, когда не возникает такой задачи вызывать логику из разных мест - этот принцип часто нарушается без существенных последствий.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы