1. Вступ
PDF цього документа доступний за посиланням |ICI|.
Приклади з цього документа доступні за посиланням |ICI|.
Тут ми пропонуємо на прикладах ознайомити вас з важливими поняттями ASP.NET MVC — веб-фреймворку.NET, що забезпечує основу для розробки веб-додатків за моделлю MVC (Модель — Вигляд — Контролер).
Для розуміння прикладів у цьому документі не потрібно багато попередніх знань. Необхідні лише базові знання мови C#. Їх можна знайти в документі «Вступ до мови C#» на URL [Опанування мови C# версії 3.0 з використанням .NET Framework 3.5 (2008)]. Для практичного застосування отриманих знань пропонується приклад на ASP.NET MVC. У ньому використовується ORM (об’єктно-реляційний мапер) Entity Framework. Цей ORM представлено в документі «Вступ до Entity Framework 5 Code First», доступному за посиланням URL [Вступ до Entity Framework 5 Code First на прикладах (2012)].
Різні приклади з цього документа доступні за посиланнями URL та [Вступ до фреймворку ASP.NET MVC на прикладах (2013)] у вигляді файлу zip, який можна завантажити.
Цей документ є неповним у багатьох аспектах. Для більш детального вивчення ASP.NET MVC можна скористатися такими джерелами:
- [ref1]: книга «Pro ASP.NET MVC 4», написана Адамом Фріменом у видавництві Apress. Це чудова книга. Якби вона була доступна в Інтернеті безкоштовно та французькою мовою, цей документ не мав би сенсу. Я рекомендую всім, хто має таку можливість, ознайомитися з ASP.NET MVC за допомогою цієї книги. Вихідні коди прикладів із книги доступні безкоштовно на URL [http://www.apress.com/9781430242369];
- [ref2]: на сайті фреймворку [http://www.asp.net/mvc]. Там ви знайдете всі необхідні матеріали для самостійного навчання. Французька версія доступна на URL [http://dotnet.developpez.com/mvc/ ];
- сайт [developpez.com], присвячений ASP.NET та [http://dotnet.developpez.com/aspnet/ ].
Документ написано таким чином, щоб його можна було читати без комп’ютера під рукою. Тому наведено багато знімків екрана.
1.1. Місце ASP.NET MVC у веб-додатку
Насамперед визначимо місце ASP.NET MVC у процесі розробки веб-додатку. Найчастіше такий додаток будується на багатошаровій архітектурі, наприклад, такій:
![]() |
- шар [Web] — це шар, що взаємодіє з користувачем веб-додатка. Користувач взаємодіє з веб-додатком через веб-сторінки, що відображаються у браузері. Саме в цьому шарі, і лише в ньому, розташовані ASP.NET та MVC;
- шар [métier] реалізує правила управління додатком, такі як розрахунок заробітної плати або рахунку-фактури. Цей рівень використовує дані, що надходять від користувача через рівень [Web], а також дані з SGBD через рівень [DAO];
- Рівень [DAO] (об’єкти доступу до даних), рівень [ORM] (об’єктно-реляційний мапер) та коннектор ADO.NET забезпечують доступ до даних SGBD. Рівень [ORM] забезпечує зв’язок між об’єктами, що обробляються рівнем [DAO], та рядками й стовпцями таблиць реляційної бази даних. У світі найчастіше використовуються два ORM: NET, NHibernate (http://sourceforge.net/projects/nhibernate/) та Entity Framework (http://msdn.microsoft.com/en-us/data/ef.aspx);
- інтеграцію шарів можна здійснити за допомогою контейнера введення залежностей (Dependency Injection Container), такого як Spring (http://www.springframework.net/ );
У більшості наведених нижче прикладів буде використовуватися лише один рівень — рівень [Web]:
![]() |
Проте цей документ завершиться створенням багатошарового веб-додатка:
![]() |
1.2. Модель розробки ASP.NET MVC
ASP.NET MVC реалізує так звану архітектурну модель MVC (Модель – Вигляд – Контролер) наступним чином:
![]() |
Обробка запиту клієнта відбувається наступним чином:
- запит — запитувані URL мають вигляд http://machine:port/contexte/Controlleur/Action/param1/param2/....?p1=v1&p2=v2&... [Front Controller] використовує файл конфігурації для «маршрутизації» запиту до відповідного контролера та відповідної дії в межах цього контролера. Для цього він використовує шлях [Controlleur/Action] від URL. Решта частин URL та [/param1/param2/...] — це необов’язкові параметри, які будуть передані до дії. Літера C у MVC тут відповідає рядку [Front Controller, Contrôleur, Action]. Якщо шлях [Controlleur/Action] не веде до існуючого контролера або існуючої дії, веб-сервер відповість, що запитуване URL не знайдено.
- Обробка
- обрана дія може використовувати параметри parami, які їй передала [Front Controller]. Вони можуть походити з кількох джерел:
- з шляху [/param1/param2/...] дії URL,
- з параметрів [p1=v1&p2=v2] від URL,
- з параметрів, надісланих браузером разом із запитом;
- під час обробки запиту користувача дії може знадобитися рівень [métier] [2b]. Після обробки запиту клієнта це може викликати різні відповіді. Класичним прикладом є:
- сторінка з повідомленням про помилку, якщо запит не вдалося обробити належним чином
- сторінка підтвердження в іншому випадку
- дія вимагає відображення певного виду [3]. Цей вид відображатиме дані, які називаються моделлю виду. Це «M» у MVC. Дія створить цю модель M [2c] і вимагатиме відображення виду V [3];
- відповідь — обраний вигляд V використовує модель M, побудовану дією, для ініціалізації динамічних частин відповіді HTML, яку він повинен надіслати клієнту, а потім надсилає цю відповідь.
Тепер уточнимо зв’язок між веб-архітектурою MVC та багаторівневою архітектурою. Залежно від того, як ми визначаємо модель, ці два поняття можуть бути пов’язані або ні. Розглянемо однорівневий веб-додаток ASP.NET MVC:
![]() |
Якщо ми реалізуємо рівень [Web] за допомогою ASP.NET та MVC, ми отримаємо веб-архітектуру MVC, але не багатошарову архітектуру. У цьому випадку рівень [Web] візьме на себе все: представлення, бізнес-логіку, доступ до даних. Цю роботу виконуватимуть дії.
Тепер розглянемо багаторівневу веб-архітектуру:
![]() |
Рівень [Web] можна реалізувати без використання фреймворку та без дотримання моделі MVC. У цьому випадку ми дійсно маємо багаторівневу архітектуру, але веб-рівень не реалізує модель MVC.
Таким чином, рівень [Web],може бути реалізований за допомогою ASP.NET та MVC, і тоді ми отримуємо багаторівневу архітектуру з шаром [Web] типу MVC. Зробивши це, можна замінити цей шар ASP.NET MVC на класичний шар ASP.NET (WebForms), зберігаючи решту (бізнес-логіка, DAO, ORM) без змін. У результаті ми отримуємо багаторівневу архітектуру з шаром [Web], який більше не є типом MVC.
У MVC ми зазначили, що модель M відповідає представленню V, c.a.d, — сукупності даних, що відображаються представленням V. Наводимо ще одне визначення моделі M для MVC:
![]() |
Багато авторів вважають, що те, що знаходиться праворуч від шару [Web], утворює модель M для MVC. Щоб уникнути двозначностей, можна говорити про:
- моделі домену, коли мається на увазі все, що знаходиться праворуч від шару [Web]
- про модель подання, коли йдеться про дані, що відображаються поданням V
Надалі термін «модель M» позначатиме виключно модель подання V.
1.3. Використані інструменти
Далі ми використовуємо (вересень 2013 року) версії Express Visual Studio 2012:
- [http://www.microsoft.com/visualstudio/fra/products/visual-studio-express-for-windows-desktop ] для настільних додатків;
- [http://www.microsoft.com/visualstudio/fra/products/visual-studio-express-for-Web ] для веб-додатків.
Для встановлення останніх версій цих продуктів можна скористатися продуктом [Web Platform Installer] від Microsoft (http://www.microsoft.com/Web/downloads/platform.aspx ).
Крім того, слід використовувати браузер Chrome від Google (http://www.google.fr/intl/fr/chrome/browser/). До нього потрібно додати розширення [Advanced Rest Client] . Для цього можна виконати такі дії:
- зайти на сайт [Google Web store] (https://chrome.google.com/webstore) у браузері Chrome;
- знайти додаток [Advanced Rest Client]:
![]() |
- після чого додаток стане доступним для завантаження:
![]() |
- щоб її отримати, вам потрібно створити обліковий запис Google. [Google Web Store] потім вимагає підтвердження [1]:
![]() |
- У [2] доданий розширення доступний у меню [Applications] [3]. Цей пункт меню відображається на кожній новій вкладці, яку ви створюєте (CTRL-T) у браузері.
1.4. Приклади
Більшість навчальних прикладів будуть зведені лише до веб-шару:
![]() |
Після завершення цього курсу ми розглянемо багатошаровий веб-додаток:
![]() |











