3. Съдържание 2/3
• ASP.NET MVC
–
–
–
–
–
Какво е ASP.NET MVC?
История на ASP.NET MVC
Предимства
Недостатъци
Separation of Concerns
• ASP.NET MVC приложения
–
–
–
–
Обработка на заявка
Контролери
Действия
Модели
5. MVC
• Какво е MVC?
– Шаблон за разработка на приложения
– Позволява преизползване на кода
– SoC (Separation of Concerns)
• История на MVC
– Формулиран през 70те на миналия век от Trygve
Reenskaug
– Имплементиран в Smalltalk за настолни приложения
– Адаптиран за други видове приложения
6. Основни принципи на MVC
• Модел, изглед и контролер
• Мястото на потребителя
• Предимства на MVC
–…
• Недостатъци на MVC
– По-сложен от други подходи
7. Контролери
• Обработват заявката с помощта на модели и
изгледи
• Осигуряват взаимодействие с потребителя
• Контролират работата на приложението
• Реализират логика специфична за приложението
8. Модели
• Множество от класове представляващи бизнес
логиката и данните, с които тя работи
• Контролират правилата за валидиране и
манипулиране на данните
• Скриват достъпа до данните (съотв. могат да се
разглеждат като слой за достъп до данни)
10. ASP.NET MVC
• Какво е ASP.NET MVC?
– Реализация на MVC за ASP.NET приложения
– Безплатен проект под Apache 2.0 лиценз
– Не замества ASP.NET Web Forms
• История на ASP.NET MVC
–
–
–
–
CTP версия – 10 октомври 2007 (Scott Guthrie)
Версия 1.0 – 13 март 2009
Версия 4.0 – 15 август 2012 / 30 май 2013
Версия 5.0 preview – 26 юни 2013
11. ASP.NET MVC
• Предимства
–
–
–
–
–
По-добър контрол върху изхода
Тестваем
Слабо обвръзване (loose coupling)
Разширяем
Конвенции над конфигурация
• Недостатъци
• Separation of Concerns
– SRP (Single Responsibility Principle)
– DRY (Don’t Repeat Yourself)
– TDD (Test-Driven Development)
12. Обработка на заявка
Постъпва HTTP заявка
Определя се контролер
Контролерът създава модел
Изпълнява се действието на контролера
Избира се подходящ изглед (резултат)
Моделът се подава на изгледа
Изгледът преобразува модела в подходящ
формат
• Изпраща се HTTP отговор
•
•
•
•
•
•
•
14. Контролери
• Контролерите се разполагат в папка “Controllers”
• Контролерите са класове наследяващи класа
Controller
• Наименованията на класовете на контролерите
завършват с “Controller”
• На различните заявки съответства определено
действие
• Всеки контролер реализира едно или повече
действия под формата на методи
15. Действия - характеристики
• Действия
– Всяко действие е публичен нестатичен метод на
съответния контролер
– Всяко действие има параметри
– Всяко действие връща резултат
• Резултатът може да е всякакъв
• Често използван резултат е инстанция на ActionResult
16. Действия - параметри
• Данните от заявката се превръщат в параметри
към методите за действия
– Подаване на параметри с рутиране
– Подаване на параметри с GET заявка
– Подаване на параметри с POST заявка
• Контрол над поведението на методите за
действия със селектори
– Наименование – [ActionName]
– Метода –
[HttpGet], [HttpPost], [HttpDelete], [HttpOptions] и т.н.
– Ограничения – [NoAction], [ChildActionOnly] и
[RequireHttps]
17. Действия - резултати
Наименование
Цел
Метод
ContentResult
Низ
Content()
EmptyResult
Празен отговор
FileContentResult
FilePathResult
FileStreamResult
Файлово съдържание
HttpUnauthorizedResult
HTTP 403 Status Code
JavaScriptResult
JavaScript, който да се
изпълни
JavaScript()
JsonResult
Данни в JSON формат
Json()
RedirectResult
Препращане към друг URL
Redirect()
RedirectPermanent()
RedirectToRouteResult
Препращане към друго
действие
RedirectToRoute()
RedirectToAction()
ViewResult
PartialViewResult
Изглед от view engine
View()
PartialView()
File()
18. Модели
• Модели
– Моделите се разполагат в папка /Models/
– Отразяват правилата на бизнес логиката на
приложението за авторизация, валидация и т.н.
– Контролират достъпа до данните и тяхната
манипулация
– Изолират работата с данните и в този смисъл
представляват слой за достъп до данните
19. Изгледи
• Представляват шаблони за динамична
визуализация на данните в папка /Views/
• Различни машини за изгледи (view engines)
– Изпълняват код, за генериране на изхода
– Дават “помощници” за генериране на изхода
– Най-популярни машини са Razor и Web Forms
• Данни към изгледа се поддават с колекцията
ViewBag, динамични обект ViewData или
статичния обект Model (силно типизиране)
• Поддръжка на оформления (layouts)
• Поддръжка на частични изгледи (partial views)
20. Razor - основи
•
•
•
•
•
•
•
•
•
•
Език за разработка на шаблони
Razor кодът започва със символа “@”
Екраниране на “@” с “@@”
Коментари с “@*...*@”
Razor блоковете от код с “@{…}”
Визуализация на текст става с “@:”
Изрази с “@(…)”
C# конструкции като if, else, for, foreach и т.н.
Включване пространство на имената с “@using”
Дефиниране типа на модела с “@model”
21. Помощници
• Всеки изглед наследява WebViewPage, а той ViewPage
– ViewPage има помощни свойства Html, Ajax, Url и др.
съответно от клас HtmlHelper, AjaxHelper, UrlHelper и
др.
– ViewPage може да има и собствени помощни свойства
• Помощните методи връщат резултат под
формата на низове
22. Собствени помощници
• Разработка на собствени помощни свойства с
код
– Разширяващи методи на класовете на съответните
помощници
– Връщат низове, презаписват метода ToString() или
генерират тагове/атрибути като връщат TagBuilder
• Разработка на собствени помощни свойства с
Razor
– Шаблон /App_Code/Helpers.cshtml и “@helper”
23. Razor - оформления
• Подразбиращо се оформление в
/Views/_ViewStart.cshtml
• В изгледа: Всеки изглед може да контролира
своето оформление с променливата Layout
• В оформлението: Визуализиране на
съдържанието с @RenderBody()
24. Razor – оформления и секции
• В изгледа: Дефиниране на секция с “@section
Name { … }”
• В оформлението: Визуализиране на секция с
@RenderSection(name, isRequired)”
• В оформлението: Използване на
“@IsSectionDefined()”
25. Частични изгледи
• Частичните изгледи се намират в папка /Views/
или в папката /View/Shared/
• Частичните изгледи отново са стандартни
шаблони
• Частичните изгледи визуализират части от
страницата
– Преизползване на части от изгледите
– Помощници – Partial, RenderPartial и Action
26. Структура и конфигуриране
• Структура на ASP.NET MVC приложение
• Конфигуриране на ASP.NET MVC приложение
– Конфигуриране с конфигурация в Web.config
– Конфигуриране с код в Global.asax
•
•
•
•
•
•
Web API
Филтриране
Валидиране
Рутиране
Пакети (bundles)
Автентикация
27. Рутиране
• Контролира съответствието между образци на
адреси и контролер/действие/параметри
• Осигурява добре изглеждащи, REST-like и SEO
адреси
• Дефиниране на рутиране
–
–
–
–
Наименование
Образец на адреса
Съответстващи контролер/действие/параметри
Ограничени за параметрите
• Дебъгване на рутирането с RouteDebugger
28. Филтриране
• Филтрирането може да се прилага преди и след
изпълнението на определена логика
• Филтрирането може да се прилага върху
действия и контролери
• Глобални филтри се регистрират в
GlobalFilters.Filters (или /App_Start/FilterConfig.cs)
• Собствени филтри за действия
– Разполагат се в папка /Filters/
– Наследяват ActionFilterAttribute
– Приложими върху контролер, действие или глобално
в GlobalFilters.Filters