HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-21
1 <p><a>#статьи</a></p>
1 <p><a>#статьи</a></p>
2 <ul><li>16 окт 2019</li>
2 <ul><li>16 окт 2019</li>
3 <li>0</li>
3 <li>0</li>
4 </ul><p>Объясняем, что такое паттерн MVC и как он помогает упростить разработку.</p>
4 </ul><p>Объясняем, что такое паттерн MVC и как он помогает упростить разработку.</p>
5 <p> vlada_maestro / shutterstock</p>
5 <p> vlada_maestro / shutterstock</p>
6 <p>Пишет о программировании, в свободное время создаёт игры. Мечтает открыть свою студию и выпускать ламповые RPG.</p>
6 <p>Пишет о программировании, в свободное время создаёт игры. Мечтает открыть свою студию и выпускать ламповые RPG.</p>
7 <p>MVC - это шаблон программирования, который позволяет разделить логику приложения на три части:</p>
7 <p>MVC - это шаблон программирования, который позволяет разделить логику приложения на три части:</p>
8 <ul><li><strong>Model (модель)</strong>. Получает данные от контроллера, выполняет необходимые операции и передаёт их в вид.</li>
8 <ul><li><strong>Model (модель)</strong>. Получает данные от контроллера, выполняет необходимые операции и передаёт их в вид.</li>
9 <li><strong>View (вид или представление)</strong>. Получает данные от модели и выводит их для пользователя.</li>
9 <li><strong>View (вид или представление)</strong>. Получает данные от модели и выводит их для пользователя.</li>
10 <li><strong>Controller (контроллер)</strong>. Обрабатывает действия пользователя, проверяет полученные данные и передаёт их модели.</li>
10 <li><strong>Controller (контроллер)</strong>. Обрабатывает действия пользователя, проверяет полученные данные и передаёт их модели.</li>
11 </ul><p>Может показаться, что это что-то запутанное, но на самом деле всё просто.</p>
11 </ul><p>Может показаться, что это что-то запутанное, но на самом деле всё просто.</p>
12 <p>Лучше всего понять концепцию MVC можно на реальном примере - ресторане с фастфудом. В нём посетители (пользователи) подходят к кассиру (одновременно вид и контроллер), видят меню и заказывают какое-нибудь блюдо.</p>
12 <p>Лучше всего понять концепцию MVC можно на реальном примере - ресторане с фастфудом. В нём посетители (пользователи) подходят к кассиру (одновременно вид и контроллер), видят меню и заказывают какое-нибудь блюдо.</p>
13 <p>Кассир проверяет, всё ли в порядке с заказом, и после оплаты передаёт нужные данные повару (модель). Повар готовит заказанное блюдо, хотя понятия не имеет о том, как выглядит посетитель, оплатил ли он заказ и так далее.</p>
13 <p>Кассир проверяет, всё ли в порядке с заказом, и после оплаты передаёт нужные данные повару (модель). Повар готовит заказанное блюдо, хотя понятия не имеет о том, как выглядит посетитель, оплатил ли он заказ и так далее.</p>
14 <p>Когда модель закончит свою работу, она отправит результат в вид - обратно кассиру, который, в свою очередь, отдаст готовое блюдо посетителю.</p>
14 <p>Когда модель закончит свою работу, она отправит результат в вид - обратно кассиру, который, в свою очередь, отдаст готовое блюдо посетителю.</p>
15 <p>Если же говорить о приложениях, то компоненты будут следующие:</p>
15 <p>Если же говорить о приложениях, то компоненты будут следующие:</p>
16 <ul><li><strong>Вид</strong> - интерфейс.</li>
16 <ul><li><strong>Вид</strong> - интерфейс.</li>
17 <li><strong>Контроллер</strong> - обработчик событий, инициируемых пользователем (нажатие на кнопку, переход по ссылке, отправка формы).</li>
17 <li><strong>Контроллер</strong> - обработчик событий, инициируемых пользователем (нажатие на кнопку, переход по ссылке, отправка формы).</li>
18 <li><strong>Модель</strong> - метод, который запускается обработчиком и выполняет все основные операции (получение записей из базы данных, проведение вычислений).</li>
18 <li><strong>Модель</strong> - метод, который запускается обработчиком и выполняет все основные операции (получение записей из базы данных, проведение вычислений).</li>
19 </ul><p>Стоит также отметить, что реализация паттерна MVC может отличаться в зависимости от задачи. Например, в веб-разработке модель и вид взаимодействуют друг с другом через контроллер (как в примере с рестораном), а в приложениях модель может сама уведомлять вид, что нужно что-то изменить.</p>
19 </ul><p>Стоит также отметить, что реализация паттерна MVC может отличаться в зависимости от задачи. Например, в веб-разработке модель и вид взаимодействуют друг с другом через контроллер (как в примере с рестораном), а в приложениях модель может сама уведомлять вид, что нужно что-то изменить.</p>
20 <p>Этот паттерн разработки нужен для того, чтобы разделить логические части приложения и создавать их отдельно друг от друга. То есть писать независимые блоки кода, которые можно как угодно менять, не затрагивая другие.</p>
20 <p>Этот паттерн разработки нужен для того, чтобы разделить логические части приложения и создавать их отдельно друг от друга. То есть писать независимые блоки кода, которые можно как угодно менять, не затрагивая другие.</p>
21 <p>Например, чтобы можно было переписать способ обработки данных, не меняя при этом способ их отображения. Это позволяет эффективно работать нескольким программистам - каждый занимается своим компонентом. При этом разработчику не нужно вникать в чужой код и его действия никак не повлияют на другие фрагменты приложения.</p>
21 <p>Например, чтобы можно было переписать способ обработки данных, не меняя при этом способ их отображения. Это позволяет эффективно работать нескольким программистам - каждый занимается своим компонентом. При этом разработчику не нужно вникать в чужой код и его действия никак не повлияют на другие фрагменты приложения.</p>
22 <p>Независимым программистам MVC тоже будет полезен, потому что они смогут сосредоточиться на разработке одного компонента за раз.</p>
22 <p>Независимым программистам MVC тоже будет полезен, потому что они смогут сосредоточиться на разработке одного компонента за раз.</p>
23 <p>Чтобы лучше вникнуть в этот паттерн, стоит применить его на практике. Для этого создайте<a>WPF-приложение</a>и сверстайте такую форму:</p>
23 <p>Чтобы лучше вникнуть в этот паттерн, стоит применить его на практике. Для этого создайте<a>WPF-приложение</a>и сверстайте такую форму:</p>
24 &lt;StackPanel VerticalAlignment="Center" HorizontalAlignment="Center"&gt; &lt;StackPanel Orientation="Horizontal"&gt; &lt;TextBox Name="Num1TextBox" Margin="5" Width="50"/&gt; &lt;TextBlock Text="+" Margin="5" FontWeight="Bold"/&gt; &lt;TextBox Name="Num2TextBox" Margin="5" Width="50"/&gt; &lt;/StackPanel&gt; &lt;TextBlock Text="0" Name="ResultTextBlock" TextAlignment="Center" Margin="5"/&gt; &lt;Button Content="Посчитать" Name="CalculateButton" Click="CalculateButton_Click" Margin="5"/&gt; &lt;/StackPanel&gt;<p>Это и есть View - его видит пользователь. Тут есть кнопка, при нажатии на которую вызывается Controller:</p>
24 &lt;StackPanel VerticalAlignment="Center" HorizontalAlignment="Center"&gt; &lt;StackPanel Orientation="Horizontal"&gt; &lt;TextBox Name="Num1TextBox" Margin="5" Width="50"/&gt; &lt;TextBlock Text="+" Margin="5" FontWeight="Bold"/&gt; &lt;TextBox Name="Num2TextBox" Margin="5" Width="50"/&gt; &lt;/StackPanel&gt; &lt;TextBlock Text="0" Name="ResultTextBlock" TextAlignment="Center" Margin="5"/&gt; &lt;Button Content="Посчитать" Name="CalculateButton" Click="CalculateButton_Click" Margin="5"/&gt; &lt;/StackPanel&gt;<p>Это и есть View - его видит пользователь. Тут есть кнопка, при нажатии на которую вызывается Controller:</p>
25 private void CalculateButton_Click(object sender, RoutedEventArgs e) //Метод, который вызывается при нажатии на кнопку "Посчитать" { //Валидация полученных данных string text1 = Num1TextBox.Text.Trim(); string text2 = Num2TextBox.Text.Trim(); int num1 = 0; int num2 = 0; if (!string.IsNullOrEmpty(text1) &amp;&amp; !string.IsNullOrEmpty(text2)) { try { num1 = Convert.ToInt32(text1); num2 = Convert.ToInt32(text2); } catch (Exception exc) { } Calculate(num1, num2); //Передача данных модели } }<p>Контроллер получает пользовательский ввод и обрабатывает данные. Он также может проверять права пользователя. Если валидация проходит успешно, данные передаются в Model:</p>
25 private void CalculateButton_Click(object sender, RoutedEventArgs e) //Метод, который вызывается при нажатии на кнопку "Посчитать" { //Валидация полученных данных string text1 = Num1TextBox.Text.Trim(); string text2 = Num2TextBox.Text.Trim(); int num1 = 0; int num2 = 0; if (!string.IsNullOrEmpty(text1) &amp;&amp; !string.IsNullOrEmpty(text2)) { try { num1 = Convert.ToInt32(text1); num2 = Convert.ToInt32(text2); } catch (Exception exc) { } Calculate(num1, num2); //Передача данных модели } }<p>Контроллер получает пользовательский ввод и обрабатывает данные. Он также может проверять права пользователя. Если валидация проходит успешно, данные передаются в Model:</p>
26 public void Calculate(int num1, int num2) { result = num1 + num2; //Проведение операций с полученными данными UpdateView(); //Вызов обновления представления }<p>Модель проводит с этими данными необходимые операции, а затем вызывает метод обновления вида:</p>
26 public void Calculate(int num1, int num2) { result = num1 + num2; //Проведение операций с полученными данными UpdateView(); //Вызов обновления представления }<p>Модель проводит с этими данными необходимые операции, а затем вызывает метод обновления вида:</p>
27 public void UpdateView() { ResultTextBlock.Text = result.ToString(); //Изменение вида }<p>Вот результат работы такой программы:</p>
27 public void UpdateView() { ResultTextBlock.Text = result.ToString(); //Изменение вида }<p>Вот результат работы такой программы:</p>
28 <p>На первый взгляд MVC может показаться сложным, но чем больше усилий уделять на его изучение, тем понятнее будет, почему многие разработчики предпочитают именно его. Особенно если сравнивать его с обычной разработкой, где за всё отвечают обработчики событий.</p>
28 <p>На первый взгляд MVC может показаться сложным, но чем больше усилий уделять на его изучение, тем понятнее будет, почему многие разработчики предпочитают именно его. Особенно если сравнивать его с обычной разработкой, где за всё отвечают обработчики событий.</p>
29 <a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>
29 <a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>