MVC: Разделение ответственности вместо наведения порядка в папках
Паттерны — это не про красоту в IDE, а про кирпичики, из которых ты в итоге соберешь архитектуру под конкретную задачу.
Самый заезженный и при этом самый недопонятый из них — это MVC (Model-View-Controller).
Большинство новичков уверены, что MVC — это просто инструкция, как раскидать файлы по папкам с соответствующими названиями. Но если ты смотришь на это как инженер, ты видишь не папки, а границы ответственности.
Модель: Где живет истина
Мы привыкли считать, что Модель — это просто прослойка для общения с базой данных. И на первый взгляд оно так и есть. В том же Laravel модели это отдельный класс, основная задача которого прочитать или записать данные в базу. Но идея здесь глубже. Модель — это и есть сердце твоего приложения, его бизнес-логика.
Если у тебя есть модель Product, то именно внутри этого класса должна лежать логика расчета его объема для доставки или специфические правила скидок. Модель «знает», как ведут себя данные, и ей плевать, кто ее вызвал — мобильное приложение, веб-страница или консольный скрипт. Она живет в вакууме своих правил.
Контроллер: Оркестратор-параноик
Контроллер — это самый ленивый слой, и в этом его сила. В идеале он должен быть «тонким». Его работа — принять запрос, проверить права доступа (кто ты такой и можно ли тебе сюда?) и отдать команду на дальнейшее выполнение.
Как только контроллер начинает сам считать скидки или высчитывать логистику — всё, архитектура поплыла, он начал «толстеть». Контроллер не должен думать, он должен делегировать. Это просто диспетчер: принял входящий пакет, дернул нужный метод в модели и отправил результат дальше.
View: Интерфейс и споры о логике
View отвечает исключительно за то, что увидит пользователь. Кнопочки, формочки, таблички. Здесь часто ломают копья: должна ли во View быть логика?
Упарываться в полный запрет логики в шаблонах не стоит. Если тебе нужно собрать из двух коллекций (категории и товары) древовидное меню для отрисовки — это логика отображения. Она не нужна модели, потому что модели все равно, как ты выведешь данные. Она так же не нужна контроллеру. Это задача View — подготовить данные так, чтобы интерфейс переварил их и не подавился.
Заменяемость слоев
Главный смысл MVC не в том, чтобы файлы лежали отдельно, а в том, чтобы ты мог заменить один слой и не сломать остальные.
Если ты завтра решишь снести фронтенд на Blade и прикрутить мобильное приложение или React-клиент, твои Модели и Контроллеры даже не заметят подмены. (На практике контроллер скорее всего заметит, потому что с Blade он отдавал HTML а новый фронтенд скорее всего ожидает JSON, но это минимальные косметические правки) Ты меняешь только View-слой, потому что бизнес-логика и правила управления данными остались законсервированы в своих слоях.
Ставь 🔥 если ты итак писал код по MVC и просто не знал этого. А если что-то осталось непонятным или запутанным — пиши вопросы в комментарии, я обязательно отвечу!
10МДК | ВЕБМастер
Post #60
73

- 🔥 8