TGViewer
10 минут до кода 10 минут до кода @ten_minutes_to_code · 228 subscribers
Post #60 73
MVC: Разделение ответственности вместо наведения порядка в папках

Паттерны — это не про красоту в IDE, а про кирпичики, из которых ты в итоге соберешь архитектуру под конкретную задачу.

Самый заезженный и при этом самый недопонятый из них — это MVC (Model-View-Controller).

Большинство новичков уверены, что MVC — это просто инструкция, как раскидать файлы по папкам с соответствующими названиями. Но если ты смотришь на это как инженер, ты видишь не папки, а границы ответственности.

Модель: Где живет истина

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

Если у тебя есть модель Product, то именно внутри этого класса должна лежать логика расчета его объема для доставки или специфические правила скидок. Модель «знает», как ведут себя данные, и ей плевать, кто ее вызвал — мобильное приложение, веб-страница или консольный скрипт. Она живет в вакууме своих правил.

Контроллер: Оркестратор-параноик

Контроллер — это самый ленивый слой, и в этом его сила. В идеале он должен быть «тонким». Его работа — принять запрос, проверить права доступа (кто ты такой и можно ли тебе сюда?) и отдать команду на дальнейшее выполнение.

Как только контроллер начинает сам считать скидки или высчитывать логистику — всё, архитектура поплыла, он начал «толстеть». Контроллер не должен думать, он должен делегировать. Это просто диспетчер: принял входящий пакет, дернул нужный метод в модели и отправил результат дальше.

View: Интерфейс и споры о логике

View отвечает исключительно за то, что увидит пользователь. Кнопочки, формочки, таблички. Здесь часто ломают копья: должна ли во View быть логика?

Упарываться в полный запрет логики в шаблонах не стоит. Если тебе нужно собрать из двух коллекций (категории и товары) древовидное меню для отрисовки — это логика отображения. Она не нужна модели, потому что модели все равно, как ты выведешь данные. Она так же не нужна контроллеру. Это задача View — подготовить данные так, чтобы интерфейс переварил их и не подавился.

Заменяемость слоев

Главный смысл MVC не в том, чтобы файлы лежали отдельно, а в том, чтобы ты мог заменить один слой и не сломать остальные.

Если ты завтра решишь снести фронтенд на Blade и прикрутить мобильное приложение или React-клиент, твои Модели и Контроллеры даже не заметят подмены. (На практике контроллер скорее всего заметит, потому что с Blade он отдавал HTML а новый фронтенд скорее всего ожидает JSON, но это минимальные косметические правки) Ты меняешь только View-слой, потому что бизнес-логика и правила управления данными остались законсервированы в своих слоях.

Ставь 🔥 если ты итак писал код по MVC и просто не знал этого. А если что-то осталось непонятным или запутанным — пиши вопросы в комментарии, я обязательно отвечу!

10МДК | ВЕБМастер
  • 🔥 8
More from @ten_minutes_to_code
  1. May 28, 2026Первый сезон получился про путь “от пользователя к инженеру”. Именно эту картину мы весь с…
  2. May 28, 2026Когда я запускал этот канал, у меня была довольно простая идея: писать каждый день коротки…
  3. May 7, 2026Почему нормализация БД — это чистая логика, а не бюрократия На любом ongoing-проекте требо…
  4. May 3, 2026🤔 А где новые посты? Сори что вот так пропал без предупреждения, но я думал что справлюсь…
  5. Apr 29, 2026Почему HTTPS не спасет ваши секреты Замочек в адресной строке браузера — это мощное успоко…
  6. Apr 28, 2026Целостность данных против иллюзии атомарности Начинающий разработчик видит базу данных как…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →