Модель-вид-контролерМоде́ль–вигляд–контро́лер (MVC, Модель–представлення–контролер, англ. Model-view-controller) — архітектурний шаблон, який використовується під час проєктування та розробки програмного забезпечення. Цей шаблон передбачає поділ системи на три взаємопов'язані частини: модель даних, вигляд (інтерфейс користувача) та модуль керування. Застосовується для відокремлення даних (моделі) від інтерфейсу користувача (вигляду) так, щоб зміни інтерфейсу користувача мінімально впливали на роботу з даними, а зміни в моделі даних могли здійснюватися без змін інтерфейсу користувача. Мета шаблону — гнучкий дизайн програмного забезпечення, який повинен полегшувати подальші зміни чи розширення програм, а також надавати можливість повторного використання окремих компонентів програми. Крім того використання цього шаблону у великих системах сприяє впорядкованості їхньої структури та робить їх більш зрозумілими шляхом зменшення складності. Опис та функції компонентів
У рамках архітектурного шаблону модель–вигляд–контролер (MVC) програма поділяється на три окремі, але взаємопов'язані частини з розподілом функцій між компонентами. Модель (Model) відповідає за зберігання даних та їхню структуру. Вигляд (View) відповідальний за представлення цих даних користувачеві, тобто інтерфейс програми. Контролер (Controller) керує компонентами, отримує сигнали у вигляді реакції на дії користувача (зміна положення курсора миші, натискання кнопки, ввід даних в текстове поле) і передає дані у модель.
Модель інкапсулює ядро даних і основний функціонал їхньої обробки та не залежить від процесу вводу чи виводу даних. Вигляд може мати декілька взаємопов'язаних областей, наприклад різні таблиці та поля форм, в яких відображаються дані. У функції контролера входить відстеження визначених подій, що виникають в результаті дій користувача. Контролер дозволяє структурувати код шляхом групування пов'язаних дій в окремий клас. Наприклад у типовому MVC-проєкті може бути користувацький контролер, що містить групу методів, пов'язаних з управлінням обліковим записом користувача, таких як реєстрація, авторизація, редагування профілю та зміна пароля. Зареєстровані події транслюються в різні запити, що спрямовуються компонентам моделі або об'єктам, відповідальним за відображення даних. Відокремлення моделі від вигляду даних дозволяє незалежно використовувати різні компоненти для відображення інформації. Таким чином, якщо користувач через контролер внесе зміни до моделі даних, то інформація, подана одним або декількома візуальними компонентами, буде автоматично відкоригована відповідно до змін, що відбулися. РеалізаціїКонцепція MVC вперше застосувалася при проєктуванні мови програмування Smalltalk як модель для інтерфейсу користувача[1][2]. Також в область застосування концепції входить реалізація каркаса документ-вид (Document-View) в рамках бібліотеки MFC[3] для мови Visual C++[4]. У сучасних технологіях концепція MVC представлена схемою JSP Model 1/2 для динамічної обробки Web-змісту на основі Java Server Pages (JSP)[5]. JavaУ мові програмування Java концепція MVC підтримується на рівні стандартних класів-бібліотек. В результаті використання парадигми MVC програміст отримує у своє розпорядження могутню структуру об'єктів-компонентів, функції яких чітко розмежовані, що гарантує надійність і розширюваність системи, що розробляється.
ASP.NET2009 року Microsoft випустив каркас ASP.NET MVC з відкритими кодами.[6] Objective-cModel-View-Controller Cocoa Core Competencies (iOS Developer Library) [Архівовано 18 серпня 2016 у Wayback Machine.] iOS MVC pattern [Архівовано 31 жовтня 2012 у Wayback Machine.] Застосування MVC для мікроконтролерів
У випадку застосування такої моделі при написанні програмного забезпечення для мікроконтролерів, розподіл задач виглядатиме наступним чином:
РеалізаціяПриклад реалізації шаблону в ASP.NET MVC. Оголосимо модель, що містить логіку аплікації, не залежну від представлення. public class OrderDto
{
public string Name { get; set; }
}
public interface IOrdersModel
{
OrderDto[] LoadOrders();
}
public class OrdersModel : IOrdersModel
{
public OrderDto[] LoadOrders()
{
return new OrderDto[]
{
new OrderDto(){ Name = "Item1" },
new OrderDto(){ Name = "Item2" },
};
}
}
Додамо контролер — компонент, що зв'язує логіку аплікації (модель) із виглядом. public class OrderController : Controller
{
private readonly IOrdersModel _ordersModel;
public OrderController()
{
_ordersModel = new OrdersModel();
}
// метод-обробник, виконується при взаємодії користувача із виглядом
public IActionResult GetOrders()
{
// керування моделю
var orders = _ordersModel.LoadOrders();
// вибір вигляду
return View("OrdersView", orders);
}
}
Та додамо вигляд для взаємодії із користувачем. Користувач викликає метод контролера із вигляду. <a asp-controller="Order" asp-action="GetOrders">Get Orders</a>
Вигляд, що обирає контролер. @model MVC.Controllers.OrderDto[]
<ul>
@foreach(var order in Model)
{
<li>@order.Name</li>
}
</ul>
Див. такожВиноски
|