Зарегистрируйтесь, чтобы продолжить обучение

MVC Ключевые аспекты веб-разработки на Python

В предыдущем уроке мы дошли до следующей структуры:

# Получаем объекты из базы
photos = Photo.objects.all()
# Передаем их в шаблон
render(request, 'polls/detail.html', {'photos': photos})

В этом случае:

  • Модель предметной области описана с помощью ORM (в других случаях это не обязательно, ведь хранилище отделено от модели)
  • Функция-обработчик обращается к модели для выполнения запрошенных операций и выводит необходимые данные в шаблон
  • Шаблон описывает представление конкретной страницы и строится на данных, переданных из функции-обработчика

Описанная структура называется Model-View-Controller (MVC version 2). Эта структура устроена так:

  • M — модель предметной области
  • V — шаблон
  • C — наша функция-обработчик (в других фреймворках могут быть другие сущности)

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

MVC может быть устроена так:

MVC

Рассмотрим схему подробнее:

  • M — ядро приложения, его бизнес-логика. M не знает ничего о других частях приложения и не может на них влиять
  • V — получает данные от C и иногда от M, но такое не приветствуется. И уж точно V не должен знать ничего о базе данных. Кстати, этим грешат начинающие разработчики, которые выполняют SQL-запросы прямо из шаблонов
  • C — использует M для выполнения запрашиваемых операций и отвечает за генерацию V

MVC является архитектурным шаблоном или паттерном проектирования — это такая повторяемая архитектурная конструкция, которая решает проблему проектирования в рамках некоторого распространенного контекста. В нашем случае контекст — обработка HTTP-запросов.

Паттернов проектирования очень много на все случаи жизни. Некоторые из них очень простые и ближе к идиомам — каким-то локальным участкам кода, которые принято писать тем или иным способом в конкретном языке.

Некоторые паттерны — всеобъемлющие, подобные MVC. Они определяют глобальные ограничения, но ничего не говорят о способе реализации. В любом случае паттерны — не догма и не формальная спецификация. Всегда есть место для самостоятельного выбора.

В MVC заложена довольно простая, но важная идея — разделение приложения на слои с четкими границами. Такой подход позволяет развивать каждый слой независимо от других, если у вас правильно выстроены зависимости между ними.

Обратите внимание, что в MVC все связи однонаправленные. Другими словами, в MVC нет двух слоев, которые знают друг о друге одновременно. Если один слой знает о другом, то второй ничего не знает о первом, и наоборот. Модульность — это один из ключевых факторов, делающих приложения по-настоящему качественными с точки зрения разработки. Как вы увидите позже, многие веб-фреймворки построены именно по модели MVC с небольшими модификациями, не влияющими на ключевую идею.


Дополнительные материалы

  1. MVC

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
от 25 000 ₸ в месяц
Разработка веб-приложений на Django
10 месяцев
с нуля
Старт 26 декабря

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»