Задать вопрос

Можете объяснить зеленому что такое MVC?

В интернете куча информации, что это такое, и я в принципе немного понимаю что это, но не совсем могу разобраться.

Вот допустим View - это отвечает за отображение информации пользователю

Model - это как я поял в основном запросы в БД, и эти запросы летят во View и там уже отображаются

Controller - это что то, типа пульта от ТВ, пользователь нажимает нужную кнопку(выбирает нужную функцию), идет сигнал в Model и потом отображение во View

Я всё правильно понимаю?)

Небольшая схема
5dc130175016f619607300.jpeg
  • Вопрос задан
  • 3541 просмотр
Подписаться 17 Простой 5 комментариев
Пригласить эксперта
Ответы на вопрос 9
@Barmunk
раз уж начали картинками, продолжу

5dc135fd4f6be545808002.jpeg
Ответ написан
FanatPHP
@FanatPHP
Чебуратор тега РНР
Господи, в который раз-то уже?

Вообще-то надо указывать конкретный язык приложения, поскольку реализации паттерна отличаются весьма значительно.
Для асинхронного клиент-серверного НТТР реализация будет такая:

Самое главное, что надо понимать про эмвэцэ.
Это не 50% твоего приложения. И даже не 10.
Это тонюсенькая прослоечка, которая обслуживает только один канал общения твоего приложения с внешним миром - браузер. Есть и другие каналы, их много.

Исходя из этого, получается что
  • Модель входит в эту тройку чисто номинально. Поскольку это и есть все твое приложение, только без интерфейса. И к модели обращаются не только веб контроллеры, но и консольные скрипты, REST контроллеры, сервер очередей и прочее. Отсюда становится понятно, что "модель - это запросы в БД в основном-то" - это дикая чушь.
  • Контроллер - это, как правильно нарисовано на картинке в соседнем ответе - это такая официантка, подай-принеси. Принять запрос от НТТР клиента, преобразовать в понятный для модели вид, запросить модель, получить ответ, вернуть что-нибудь клиенту. Также может заниматься чисто браузерными заморочками типа заголовков, авторизации и пр.
  • Вью - если модель вернула что-то для показа клиенту, то вью это превращает в понятный для браузера вид.
  • Роутер - не упоминается, но незримо присутствует. Преобразует НТТР адреса в вызовы контроллеров.

Традиционно рекомендую доклад Дмитиря Елисеева с ПХП Раша 2019, там все раскладывается по полочкам.

5dc1688cad3db637954994.png
Ответ написан
@Nujabes37
:DEATH
+ - правильно, только запросы не летят во View. Их результат обрабатывается в контроллере и передаётся во вьюшку.
Ответ написан
Комментировать
dimonchik2013
@dimonchik2013
non progredi est regredi
MVP лучше чем MVC
Ответ написан
php666
@php666
PHP-макака
Ответ написан
Комментировать
@Alibaba2018
В Django это называется Model View Template.
По русски (в самой примитивной форме):
1. Template - это твоя html (код) страничка
2. Model - это куда это все это сохраняется (по факту сохраняется в БД, конечно, но тут), тупо пишешь title field/description/email address/другие поля в форме/кнопочка сохранить итд итп, т.е. создаешь болванку для сохранения своих данных
3. View (Controller) - логика взаимодействия всего этого процесса между 1) и 2),
т.е. функции, кот. при нажатии кнопки будут дату из html переносить в БД и обратно
Ответ написан
@P747
Если по простому. Вот представь ты работаешь над сторонним проектом в котором куча кода, допустим есть какой то файл в котором лежит верстка, в этом же файле лежит обработчик формы(например форма регистрации), которую например нужно сохранить в базе и отправить на email подтверждение регистрации и в этом же файле лежат классы какой-нибудь сторонней библиотеки для работы с отправкой почты.

Удобно будет работать с таким мусором? Думаю нет, а если еще над этим проектом работают другие разработчики, а некоторые из этих разработчиков к примеру фронтенды, которые не особо разбираются в backend части проекта, сколько им времени потребуется разобраться в этой каше, чтобы например только добавить пару полей формы или изменить ее структуру?

Чтобы такой каши не допускать существует MVC, тоесть из данного примера классы сторонних библиотек выносятся в классы - модель(Model), файлы верстки в View(верстка), действие формы обрабатываем через Controller(контроллер)
Ответ написан
Sindorian
@Sindorian
Программист
Если дело касается веб разработки, то лучше вообще не знать что это такое. А так, можно объяснить, например, на разработке игр.

Есть Model автомобиля, представляющий из себя невидимый кубик. У него есть всякие свойства, типа "координаты местоположения", "открыта/закрыта дверь", "разбитость стекла". Так же есть методы, такие как "ехать", "остановиться", "открыть дверь".

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

Controller бесконечно наблюдает за всей этой сценой, и, в зависимости от обстоятельств, раздает команды двум предыдущим. Например, если Model (невидимый кубик), столкнулся с другим таким кубиком, Controller исполняет на Model метод "остановиться", меняет свойство стекла на "разбитое", приказывает View дорисовать на земле осколки и так далее.

А в веб разработке MVC неприменимо. Там объекты вместе с самими классами каждый раз рождаются заново, чтобы тут же умереть, Model так и норовит быть похожей на Controller, View зачастую хочет принимать решения самостоятельно, а Controller вообще не понимает зачем он там нужен. Но логику от шаблона лучше все-таки отделять, это да.
Ответ написан
miraage
@miraage
Старый прогер
Далеко не все знают, что MVC - это не архитектурный паттерн всего приложения.
Это лишь способ взаимодействия нескольких компонентов друг с другом.
wiki
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы