Урок 10. MVC (Model-View-Controller)
Сегодня я хочу рассказать вам об одном важном инструменте для фронтенд-разработчика - паттерне Model-View-Controller.
Давайте начнем с того, что вообще такое паттерн? Паттерн - это некий шаблон, конструкция, с помощью которой можно решить часто возникающую проблему проектирования. Ну а сегодня, я хочу кратко рассказать об одном из фундаментальных паттернов MVC - Model-View-Controller.
Чтобы было проще всего понять, что это такое, давайте представим команду, работающую в офисе. Работа, которую необходимо выполнить этой команде, делится на части и распределяется между членами команды (в нашем случае, между объектами). Каждый член команды выполняет свои обязанности, при этом взаимодействует с другими членами команды для достижения цели.
При этом члена команды не волнует, как другие участники выполняют свою работу, главное, чтобы она выполнялась, и когда понадобится, он сможет это получить от них. Также и объекту в ООП (объектно-ориентированном программировании) не важно, что происходит с другим объектом, пока тот выполняет всё, что должен.
Шаблон MVC - прочно устоявшийся способ распределения обязанностей по объектам. MVC - шаблон высокого уровня: в нем рассматривается архитектура приложения и классифицируются объекты в соответствии с ролями, которые они играют в приложении.
Этот паттерн создает для приложения отдельный мир, заполняемый тремя различными типами объектов, которые и дали ему название:
-
Модель
"Двигатель" приложения. В объектах типа "модель" содержатся данные и логика.
-
Вид
Эти объекты отображают элементы на экране и отвечают на действия пользователя. Практически всё, что вы можете видеть - это и есть объекты "вида": к примеру, окно и все элементы управления...
"Вьюшки" знают, как показывать информацию, которую они получают от "моделей" и как получить какие-то данные от пользователя, которые могут понадобиться "моделям". Но "вьюшка" сама по себе ничего не должна знать о "модели".
-
Контроллер
Объекты "контроллера" являются посредником между "видами" и "моделями". Они обеспечивают объекты "вида" данными, которые необходимо отобразить (забирая эти данные у "моделей") и обеспечивают "модель" информацией, введенной пользователем" из "вида".
Так как "вид" ничего не знает о "модели", а "модель" - о "виде", но им всё же необходимо получать друг от друга информацию, необходим третий участник:
Знаете, моим самым нелюбимым курсом в университете были основы объектно-ориентированного программирования и проектирования. Каждую неделю шла туда, как на каторгу. А нужно было еще несколько раз за семестр выступить с докладом о каком-либо паттерне. И, если бы кто-то мне тогда сказал, что через пару лет я сяду писать об этом статью... да ни за что бы не поверила!