MVC

Java Collections
6 уровень , 1 лекция
Открыта

— Привет, Амиго!

— Привет, Билаабо!

— Ты уже серьезный программист. Поэтому сегодня у нас будет лекция про MVC.

MVC расшифровывается как ModelViewController. Это принцип построения архитектуры большого приложения, при котором оно разбивается на три части.

Первая часть содержит всю бизнес-логику приложения. Такая часть называется Модель (Model). В ней содержится код, который делает все то, для чего приложение создавалось. Эта часть наиболее независимая от остальных.

Вторая часть содержит все, что касается отображения данных пользователю. Такая часть называется Вид (View). Именно в ней содержится код, который управляет показом окон, страниц, сообщений и т.д.

Третья часть содержит код, который занимается обработкой действий пользователя. Любые действия пользователя, направленные на изменения модели, должны обрабатываться тут. Такая часть называется Controller.

Такой подход позволяет независимо делать три вещи: логику программы (Model)механизм показа всех данных программы пользователю (View)обрабатывать ввод/действия пользователя (Controller).

Очень часто у приложения бывает несколько View. Это нормально. Вы можете видеть в Excel одни и те же данные в виде чисел и диаграмм. В играх вы можете смотреть на события от лица героя, на карте, со стороны и т.д. Все это – это разные View для одной Model.

В Controller’е сосредоточен весь код, который принимает решение, что менять в модели в ответ на действия пользователя. Например, пользователь принял решение закрыть программу, тогда надо сохранить данные модели в файл на диск. Или пользователь ввел новые данные. Тогда надо добавить их в модель, а модель потом уведомит все View об изменении данных, чтобы они отображали только актуальное их состояние.

— Еще раз.

— С точки зрения Java-программиста, можно сказать, что Model, View, Controller – это три группы классов, у которых:

а) у каждой части есть свое назначение;

б) связи между классами одной группы довольно сильные;

в) связи между группами довольно слабые;

г) способы взаимодействия частей довольно сильно регламентированы.

И вот тебе еще такая картинка:

MVC - 1

Модель – это самая независимая часть системы. Она не зависит от View & Controller. Модель не может использовать классы из разделов View & Controller(!).

Основное ограничение вида (View) – вид не может менять модель. Классы вида могут обращаться к модели за данными или подписываться на события, но менять модель классы View не могут.

Основное ограничение контроллера – он не занимается отображением данных. Контроллер обрабатывает действия пользователя и меняет в соответствии с ними модель.

— А зачем это мне?

— То, что ты это не применяешь сейчас, еще не значит, что не будешь применять в ближайшем будущем. Ты же тут учишься для того, чтобы работать пойти. И даже если эти знания не пригодятся тебе во время обучения, они точно пригодятся тебе во время работы.

А ведь тебя ждут еще реальные проекты и собеседования…

Мы тут сейчас с тобой разговариваем, а может через месяц ты уже работать будешь.

— Ты абсолютно прав, Билаабо. Я тебя внимательно слушаю.

— Подход MVC в архитектуре приложений встречается довольно часто. Ты должен это знать, чтобы вдруг не начать добавлять классы для View в Model, т.к. так удобнее.

Самое главное в любом проекте – это его архитектура. Твоя задача на нынешнем этапе — не столько сделать хорошую архитектуру, сколько научиться разбираться в чужой. До своей ты еще потом пару лет расти будешь. А чужую понимать надо. Сразу.

Когда в приложении используется стандартная архитектура, все становится гораздо понятнее. Зная архитектуру, ты знаешь, что где лежит, как все взаимодействует, как примерно программа работает, где добавить нужный тебе класс и где искать причину ошибки.

Но, вот если ты не знаком со стандартными подходами к архитектуре, то тебе даже самая лучшая архитектура ни о чем не скажет. Будешь смотреть, как крестьянин 15 века на новый автомобиль. Стандартный автомобиль.

— Ясно. Спасибо, за интересную лекцию, Билаабо.

Вот тебе напоследок хорошая ссылка — обязательно посмотри: https://ru.wikipedia.org/wiki/Model-View-Controller.

Комментарии (63)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
6 апреля 2025
++
Anonymous #2135740 Уровень 41
2 ноября 2024
встретить MVC в современной сервис ориентированной архитектуре - это надо очень постараться об архитектуре и не только - https://t.me/hardcore_and_hardware
safelogj Уровень 51
6 октября 2024
<<мы тут учимся чтоб работу найти>> , последний раз это позорное наставление слышал в 96ом от мастера в родном ПТУ 😆
24 марта 2023
Картинка не правильная: Стрелочка между View и User должна быть направлна в другую сторону (от Представления к Пользователю).
Ilia lenskii Уровень 32
17 сентября 2022
Автор опять фсё переврал. Друзья, читайте мировую классику IT > Архитектура корпоративных программных приложений > Автор: Мартин Фаулер > Глава 14, Модель—представление—контроллер (Model View Controller) Цитата от автора: > "Типовое решение модель—представление—контроллер— одно из наиболее часто цитируемых (и, к сожалению, не верно истолковываемых)"
Igor Petrashevsky Уровень 47
25 августа 2022
осспади, снова MVC.в кажлм квесте. Безотносительно джавыраш, как умеют у нас запутать "ввод-обработка-вывод", преподнося это как открытие, которое никто не может внятно объяснить.
LuneFox Уровень 41 Expert
6 февраля 2022
Насчёт MVC у меня, как у геймера, сложилась такая картинка: Модель - это игровая приставка, внутри которой происходит вся основная логика игры. Контроллер - это джойстик, при помощи которого мы управляем игрой. Вид - это телевизор, на который выводится изображение. Телевизор подключён к приставке, но игра не перестанет работать, если мы его отсоединим (независимость модели от представления). И всё так же будет принимать команды с джойстика, и игровой процесс будет продолжаться вслепую. Джойстик подсоединён к приставке, но игра не перестанет работать и всё так же будет показывать картинку на телевизоре, если мы вытащим его из гнезда (отсутствие контроллера не повлияет на модель и представление). Изображение может продолжить обновляться по сигналам от приставки, если в игре происходят какие-то независимые от игрока изменения (например, ездят машины или плывут облака), поэтому отсутствие контроллера исключит только пользовательское вмешательство. Мы можем отключить и телевизор, и джойстик от приставки (и модель продолжит работу), только кому нужна отрезанная от внешнего мира игра, которая играет сама в себя? А вот если мы выключим приставку, то существование джойстика и телевизора сразу теряет смысл, потому что сами по себе они ничего не могут (сильная зависимость от существования модели). Самой дорогой частью, очевидно, должна быть именно приставка (модель) - с хорошей производительностью, объёмом оперативной и графической памяти. А джойстик и телевизор должны быть "тонкими" и дешёвыми - джостик должен только передавать нажатия и ничего для игры не вычислять. Телевизор также должен только показывать результирующие пиксели и ничего в игре не менять. (Т. е. не стоит зашивать даже малую часть бизнес логики в вид и контроллер.) Иначе они станут важными компонентами игры и их нельзя будет просто так взять и отключить. Также независимость игровой приставки позволяет заменять джойстики и телевизоры на более навороченные и удобные без риска сломать игру :)
Zheleznyak Maxim Уровень 4
14 февраля 2022
а ты не плох)
Andrey Karelin Уровень 41
2 мая 2022
Тем не менее, именно контроллер по сути запускает игру, имея у себя экземпляр (ссылку) на модель и вьюшку.
LuneFox Уровень 41 Expert
3 мая 2022
Кнопку включения приставки можно представить частью интерфейса контроллера, всё норм)
Maks Panteleev Уровень 41
22 июля 2021
Это после написания задачи MVC прям в тему лекция, спс)
Hidden #213 Уровень 48
4 мая 2022
Не все осилили эту задачку😰 А после этой лекции особо понятнее не стало.
Maks Panteleev Уровень 41
5 мая 2022
да изи каточка))
Hidden #213 Уровень 48
6 мая 2022
Смотрите кто объявился! Я думал ты пропал😜 Приходилось встречать в работе MVC? (не писать самому, а хотя бы просто встречать) Или у вас там свои замутки на работе? P.S. что там с Wierd West? Затянула игрушка? ;)
Maks Panteleev Уровень 41
6 мая 2022
mvc - это все что ты видишь перед собой, вся джава это mvc, это невозможно не использовать)

что там с Wierd West? Затянула игрушка? ;)
да я прошел ее, очень зашла, топчик) хоть и конечно куча багов, но стоит своих денег и времени) я играл часов 40
Hidden #213 Уровень 48
8 мая 2022
Уже подразобрался с MVC. Стал понятен сам принцип. Но всё-равно сложновато ещё. Без подсказок бы не решил сам 😑 Надо тоже попробовать поиграть (когда все баги выловят). Выглядит игра шикарно. И много вариантов прохождения. Обожаю такое. А сейчас во что-нибудь играешь? ;)
Maks Panteleev Уровень 41
8 мая 2022
играю, в тактическую рпг король артур)
Hidden #213 Уровень 48
9 мая 2022
Даже не знал, что есть такая игрушка. Выглядит, как моя любимая Disciples 😍 (которую в итоге упороли, но раньше была шикарной игрой) Надо попробовать :) Но в этой игре 40 часами наверное не отделаться...
Maks Panteleev Уровень 41
10 мая 2022
да хз, смотря на какой сложности)
Anonymous #2491313 Уровень 35
23 февраля 2021
Забыли почему-то о MVP
Николай Т. Уровень 40
24 июля 2021
MVP – Most Valuable Player 😀