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
<StackPanel VerticalAlignment="Center" HorizontalAlignment="Center"> <StackPanel Orientation="Horizontal"> <TextBox Name="Num1TextBox" Margin="5" Width="50"/> <TextBlock Text="+" Margin="5" FontWeight="Bold"/> <TextBox Name="Num2TextBox" Margin="5" Width="50"/> </StackPanel> <TextBlock Text="0" Name="ResultTextBlock" TextAlignment="Center" Margin="5"/> <Button Content="Посчитать" Name="CalculateButton" Click="CalculateButton_Click" Margin="5"/> </StackPanel><p>Это и есть View - его видит пользователь. Тут есть кнопка, при нажатии на которую вызывается Controller:</p>
24
<StackPanel VerticalAlignment="Center" HorizontalAlignment="Center"> <StackPanel Orientation="Horizontal"> <TextBox Name="Num1TextBox" Margin="5" Width="50"/> <TextBlock Text="+" Margin="5" FontWeight="Bold"/> <TextBox Name="Num2TextBox" Margin="5" Width="50"/> </StackPanel> <TextBlock Text="0" Name="ResultTextBlock" TextAlignment="Center" Margin="5"/> <Button Content="Посчитать" Name="CalculateButton" Click="CalculateButton_Click" Margin="5"/> </StackPanel><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) && !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) && !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>