0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Архитектура веб-приложений в первую очередь определяется самой природой веба - тем, как работает HTTP. Последовательность<strong>запрос-обработка-ответ</strong>- основа, на которую нанизывается остальное.</p>
1
<p>Архитектура веб-приложений в первую очередь определяется самой природой веба - тем, как работает HTTP. Последовательность<strong>запрос-обработка-ответ</strong>- основа, на которую нанизывается остальное.</p>
2
<p>Фреймворки идут дальше и разделяют приложение на дополнительные слои уже внутри самого процесса обработки запроса. Без такого разделения код быстро превращается в мешанину из запросов к базе данных, формирований html и логики обработки данных.</p>
2
<p>Фреймворки идут дальше и разделяют приложение на дополнительные слои уже внутри самого процесса обработки запроса. Без такого разделения код быстро превращается в мешанину из запросов к базе данных, формирований html и логики обработки данных.</p>
3
<p>Из обработки запроса естественным образом выделяется слой шаблонов, на основе которых генерируется HTML. Этот слой принято называть<strong>View - представление</strong>. Кроме него выделяют еще минимум два слоя:<em>Model</em>(модель) и<em>Controller</em>(контроллер). Остальное добавляется по мере роста сложности приложения.</p>
3
<p>Из обработки запроса естественным образом выделяется слой шаблонов, на основе которых генерируется HTML. Этот слой принято называть<strong>View - представление</strong>. Кроме него выделяют еще минимум два слоя:<em>Model</em>(модель) и<em>Controller</em>(контроллер). Остальное добавляется по мере роста сложности приложения.</p>
4
<p>Из названий этих слоев получает аббревиатура<strong>MVC (Model-View-Controller)</strong>- тема нашего урока.</p>
4
<p>Из названий этих слоев получает аббревиатура<strong>MVC (Model-View-Controller)</strong>- тема нашего урока.</p>
5
<h2>Версии MVC</h2>
5
<h2>Версии MVC</h2>
6
<p>Существует две разных версии MVC:</p>
6
<p>Существует две разных версии MVC:</p>
7
<ul><li>Которая была придумана изначально в сообществе программистов на SmallTalk. Она создавалась под толстые клиенты, а они представляют собой событийные системы, как современные фронтенд-приложения</li>
7
<ul><li>Которая была придумана изначально в сообществе программистов на SmallTalk. Она создавалась под толстые клиенты, а они представляют собой событийные системы, как современные фронтенд-приложения</li>
8
<li>Которая называется MVC v2. Буквы в ней те же, но означают местами другое. С такой версией MVC взаимодействие строится по-другому</li>
8
<li>Которая называется MVC v2. Буквы в ней те же, но означают местами другое. С такой версией MVC взаимодействие строится по-другому</li>
9
</ul><p>Архитектурный шаблон MVC задает основную структуру приложения и позволяет коду долго развиваться, при этом он остается удобным в поддержке.</p>
9
</ul><p>Архитектурный шаблон MVC задает основную структуру приложения и позволяет коду долго развиваться, при этом он остается удобным в поддержке.</p>
10
<p>MVC с некоторыми модификациями реализуется всеми веб-фреймворками. Если с представлением всё понятно, то с моделью и контроллером нужно разбираться отдельно.</p>
10
<p>MVC с некоторыми модификациями реализуется всеми веб-фреймворками. Если с представлением всё понятно, то с моделью и контроллером нужно разбираться отдельно.</p>
11
<h2>Контроллер</h2>
11
<h2>Контроллер</h2>
12
<p><strong>Контроллеры</strong>- это обработчики запросов. Они принимают объект запроса и возвращают объект ответа. В случае Slim контроллеры представлены анонимными функциями, но это не обязательно. В больших фреймворках контроллер - это класс, а обработчики - его методы. Эти методы обычно называют<strong>действиями - actions</strong>.</p>
12
<p><strong>Контроллеры</strong>- это обработчики запросов. Они принимают объект запроса и возвращают объект ответа. В случае Slim контроллеры представлены анонимными функциями, но это не обязательно. В больших фреймворках контроллер - это класс, а обработчики - его методы. Эти методы обычно называют<strong>действиями - actions</strong>.</p>
13
<p>При таком подходе вся логика сосредоточена в самих контроллерах, что допустимо в примитивных случаях.</p>
13
<p>При таком подходе вся логика сосредоточена в самих контроллерах, что допустимо в примитивных случаях.</p>
14
<p>Во всех остальных ситуациях выделяют еще один слой - модель. Это понятие не включает в себя персистентность и базы данных. Среди разработчиков распространено заблуждение, что модель - это база данных и данные внутри неё. Но это не так.</p>
14
<p>Во всех остальных ситуациях выделяют еще один слой - модель. Это понятие не включает в себя персистентность и базы данных. Среди разработчиков распространено заблуждение, что модель - это база данных и данные внутри неё. Но это не так.</p>
15
<h2>Модель</h2>
15
<h2>Модель</h2>
16
<p>Слой модели отвечает за бизнес-логику приложения и данные, связанные с ней. Этот слой может быть представлен большим количеством способов, которые зависят от конкретного языка программирования и используемых библиотек.</p>
16
<p>Слой модели отвечает за бизнес-логику приложения и данные, связанные с ней. Этот слой может быть представлен большим количеством способов, которые зависят от конкретного языка программирования и используемых библиотек.</p>
17
<p>Самый распространенный вариант - это ORM, но так бывает не всегда. Также часто даже при наличии отдельного слоя модели часть логики все же проникает в контроллеры.</p>
17
<p>Самый распространенный вариант - это ORM, но так бывает не всегда. Также часто даже при наличии отдельного слоя модели часть логики все же проникает в контроллеры.</p>
18
<h3>Зачем понадобилось выделять слой модель</h3>
18
<h3>Зачем понадобилось выделять слой модель</h3>
19
<p>Прочтите статью<a>Rails is not your application</a>. Она написана про Rails - популярный веб-фреймворк, который стал прообразом для большинства современных фреймворков на разных языках программирования.</p>
19
<p>Прочтите статью<a>Rails is not your application</a>. Она написана про Rails - популярный веб-фреймворк, который стал прообразом для большинства современных фреймворков на разных языках программирования.</p>
20
<p>Идея статьи заключается в том, что предметная область, которую мы реализуем внутри сайта, не связана ни с сайтом, ни с фреймворком, который используется внутри.</p>
20
<p>Идея статьи заключается в том, что предметная область, которую мы реализуем внутри сайта, не связана ни с сайтом, ни с фреймворком, который используется внутри.</p>
21
<p>Действительно, правила бухгалтерии не могут поменяться в зависимости от выбранного фреймворка. Бухгалтерия и фреймворк не связаны. Бизнес-правила этой области не зависят от существования программирования. С помощью разработки мы можем их выразить в коде, но этот код снова не будет связан с используемым фреймворком.</p>
21
<p>Действительно, правила бухгалтерии не могут поменяться в зависимости от выбранного фреймворка. Бухгалтерия и фреймворк не связаны. Бизнес-правила этой области не зависят от существования программирования. С помощью разработки мы можем их выразить в коде, но этот код снова не будет связан с используемым фреймворком.</p>
22
<p>Код, который описывает предметную область и позволяет с ней работать, можно взять и перенести в другой фреймворк без модификаций. Как видно, на логическом уровне есть граница между кодом, моделирующим предметную область, и кодом, обслуживающим веб-запросы. Но эту границу иногда трудно провести.</p>
22
<p>Код, который описывает предметную область и позволяет с ней работать, можно взять и перенести в другой фреймворк без модификаций. Как видно, на логическом уровне есть граница между кодом, моделирующим предметную область, и кодом, обслуживающим веб-запросы. Но эту границу иногда трудно провести.</p>
23
<p>Например, к чему относится отправка письма при регистрации, авторизация или восстановление пароля? Если закапываться дальше, то на горизонте возникают понятия Application Logic и Business Logic, а затем и Service Layer. Если интересно, то про них можно почитать самостоятельно.</p>
23
<p>Например, к чему относится отправка письма при регистрации, авторизация или восстановление пароля? Если закапываться дальше, то на горизонте возникают понятия Application Logic и Business Logic, а затем и Service Layer. Если интересно, то про них можно почитать самостоятельно.</p>
24
<p>Самая большая сложность в коде находится именно в этой части приложения. У модели нет четкой структуры. Это не классическое - запрос-обработка-ответ.</p>
24
<p>Самая большая сложность в коде находится именно в этой части приложения. У модели нет четкой структуры. Это не классическое - запрос-обработка-ответ.</p>
25
<p>Взаимоотношения между слоями в MVC не менее важны, чем наличие самих слоев. Модель живет своей жизнью и не знает про существование контроллера или представления. При этом последние используют модель для запуска бизнес-логики или для формирования HTTP-ответа.</p>
25
<p>Взаимоотношения между слоями в MVC не менее важны, чем наличие самих слоев. Модель живет своей жизнью и не знает про существование контроллера или представления. При этом последние используют модель для запуска бизнес-логики или для формирования HTTP-ответа.</p>
26
<p>Контроллер инициирует различные процессы и запуск бизнес-логики. Еще контроллер отвечает за формирование ответа и запускает рендеринг шаблонов. Шаблоны не знают про существование слоя контроллера, но используют данные, предоставленные им для формирования HTML или JSON.</p>
26
<p>Контроллер инициирует различные процессы и запуск бизнес-логики. Еще контроллер отвечает за формирование ответа и запускает рендеринг шаблонов. Шаблоны не знают про существование слоя контроллера, но используют данные, предоставленные им для формирования HTML или JSON.</p>