Курс по информационни технологии (2013) - 7. asp.net mvc

31
2013 Copyright © 2013 DAVID Holding Company Курс по информационни технологии Занятие №7 ASP.NET MVC

Upload: david-academy

Post on 12-Jun-2015

177 views

Category:

Education


5 download

DESCRIPTION

Занятие №7 на курса по информационни технологии (2013) провеждан от ДАВИД академия в ПМГ "Никола Обрешков" - Казанлък. Включва темите: - ASP.NET MVC

TRANSCRIPT

2013Copyright © 2013 DAVID Holding Company

Курс по информационни

технологииЗанятие №7

ASP.NET MVC

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Съдържание 1/3

• MVC– Какво е MVC?– История на MVC– Основни принципи на MVC– Контролери– Модели– Изгледи

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Съдържание 2/3

• ASP.NET MVC– Какво е ASP.NET MVC?– История на ASP.NET MVC– Предимства– Недостатъци– Separation of Concerns

• ASP.NET MVC приложения– Обработка на заявка– Контролери– Действия– Модели

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Съдържание 3/3

• ASP.NET MVC приложения– Изгледи– Razor– Помощници– Частични изгледи– Филтриране– Рутиране

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

MVC• Какво е MVC?– Шаблон за разработка на приложения– Позволява преизползване на кода– SoC (Separation of Concerns)

• История на MVC– Формулиран през 70те на миналия век от

Trygve Reenskaug– Имплементиран в Smalltalk за настолни

приложения– Адаптиран за други видове приложения

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Основни принципи на MVC• Модел, изглед и контролер• Мястото на потребителя• Предимства на MVC– …

• Недостатъци на MVC– По-сложен от други подходи

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Контролери• Обработват заявката с помощта на

модели и изгледи• Осигуряват взаимодействие с

потребителя• Контролират работата на приложението• Реализират логика специфична за

приложението

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Модели• Множество от класове представляващи

бизнес логиката и данните, с които тя работи

• Контролират правилата за валидиране и манипулиране на данните

• Скриват достъпа до данните (съотв. могат да се разглеждат като слой за достъп до данни)

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Изгледи• Определят изхода на приложението

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

ASP.NET MVC• Предимства– По-добър контрол върху изхода– Тестваем– Слабо обвръзване (loose coupling)– Разширяем– Конвенции над конфигурация

• Недостатъци• Separation of Concerns– SRP (Single Responsibility Principle)– DRY (Don’t Repeat Yourself)– TDD (Test-Driven Development)

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Обработка на заявка• Постъпва HTTP заявка• Определя се контролер• Контролерът създава модел• Изпълнява се действието на контролера• Избира се подходящ изглед (резултат)• Моделът се подава на изгледа• Изгледът преобразува модела в подходящ

формат• Изпраща се HTTP отговор

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Обработка на заявка

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Контролери• Контролерите се разполагат в папка

“Controllers”• Контролерите са класове наследяващи

класа Controller• Наименованията на класовете на

контролерите завършват с “Controller”• На различните заявки съответства

определено действие• Всеки контролер реализира едно или

повече действия под формата на методи

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Действия - характеристики• Действия– Всяко действие е публичен нестатичен метод

на съответния контролер– Всяко действие има параметри– Всяко действие връща резултат

• Резултатът може да е всякакъв• Често използван резултат е инстанция на

ActionResult

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Действия - параметри• Данните от заявката се превръщат в

параметри към методите за действия– Подаване на параметри с рутиране– Подаване на параметри с GET заявка– Подаване на параметри с POST заявка

• Контрол над поведението на методите за действия със селектори– Наименование – [ActionName]– Метода – [HttpGet], [HttpPost], [HttpDelete],

[HttpOptions] и т.н.– Ограничения – [NoAction], [ChildActionOnly] и

[RequireHttps]

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Действия - резултатиНаименование Цел Метод

ContentResult Низ Content()

EmptyResult Празен отговор

FileContentResultFilePathResultFileStreamResult

Файлово съдържание File()

HttpUnauthorizedResult

HTTP 403 Status Code

JavaScriptResult JavaScript, който да се изпълни

JavaScript()

JsonResult Данни в JSON формат Json()

RedirectResult Препращане към друг URL

Redirect()RedirectPermanent()

RedirectToRouteResult

Препращане към друго действие

RedirectToRoute()RedirectToAction()

ViewResultPartialViewResult

Изглед от view engine View()PartialView()

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Модели• Модели– Моделите се разполагат в папка /Models/– Отразяват правилата на бизнес логиката на

приложението за авторизация, валидация и т.н.

– Контролират достъпа до данните и тяхната манипулация

– Изолират работата с данните и в този смисъл представляват слой за достъп до данните

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Изгледи• Представляват шаблони за динамична

визуализация на данните в папка /Views/• Различни машини за изгледи (view

engines)– Изпълняват код, за генериране на изхода– Дават “помощници” за генериране на изхода– Най-популярни машини са Razor и Web Forms

• Данни към изгледа се поддават с колекцията ViewBag, динамични обект ViewData или статичния обект Model (силно типизиране)

• Поддръжка на оформления (layouts)• Поддръжка на частични изгледи (partial

views)

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Razor - основи• Език за разработка на шаблони• Razor кодът започва със символа “@”• Екраниране на “@” с “@@”• Коментари с “@*...*@”• Razor блоковете от код с “@{…}”• Визуализация на текст става с “@:”• Изрази с “@(…)”• C# конструкции като if, else, for, foreach и

т.н.• Включване пространство на имената с

“@using”• Дефиниране типа на модела с “@model”

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Помощници• Всеки изглед наследява WebViewPage, а

той - ViewPage– ViewPage има помощни свойства Html, Ajax, Url

и др. съответно от клас HtmlHelper, AjaxHelper, UrlHelper и др.

– ViewPage може да има и собствени помощни свойства

• Помощните методи връщат резултат под формата на низове

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Собствени помощници• Разработка на собствени помощни

свойства с код– Разширяващи методи на класовете на

съответните помощници– Връщат низове, презаписват метода ToString()

или генерират тагове/атрибути като връщат TagBuilder

• Разработка на собствени помощни свойства с Razor– Шаблон /App_Code/Helpers.cshtml и “@helper”

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Razor - оформления• Подразбиращо се оформление в

/Views/_ViewStart.cshtml• В изгледа: Всеки изглед може да

контролира своето оформление с променливата Layout

• В оформлението: Визуализиране на съдържанието с @RenderBody()

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Razor – оформления и секции• В изгледа: Дефиниране на секция с

“@section Name { … }”• В оформлението: Визуализиране на

секция с @RenderSection(name, isRequired)”

• В оформлението: Използване на “@IsSectionDefined()”

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Частични изгледи• Частичните изгледи се намират в папка

/Views/ или в папката /View/Shared/• Частичните изгледи отново са стандартни

шаблони• Частичните изгледи визуализират части

от страницата– Преизползване на части от изгледите– Помощници – Partial, RenderPartial и Action

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Структура и конфигуриране• Структура на ASP.NET MVC приложение• Конфигуриране на ASP.NET MVC

приложение– Конфигуриране с конфигурация в Web.config– Конфигуриране с код в Global.asax

• Web API• Филтриране• Валидиране• Рутиране• Пакети (bundles)• Автентикация

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Рутиране• Контролира съответствието между

образци на адреси и контролер/действие/параметри

• Осигурява добре изглеждащи, REST-like и SEO адреси

• Дефиниране на рутиране– Наименование– Образец на адреса– Съответстващи

контролер/действие/параметри– Ограничени за параметрите

• Дебъгване на рутирането с RouteDebugger

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Филтриране• Филтрирането може да се прилага преди

и след изпълнението на определена логика

• Филтрирането може да се прилага върху действия и контролери

• Глобални филтри се регистрират в GlobalFilters.Filters (или /App_Start/FilterConfig.cs)

• Собствени филтри за действия– Разполагат се в папка /Filters/– Наследяват ActionFilterAttribute– Приложими върху контролер, действие или

глобално в GlobalFilters.Filters

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

ASP.NET MVC

// ДЕМОНСТРАЦИЯ

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Въпроси?

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Благодаря!

• Валери Дачев– [email protected]– http://vdachev.net/– @vdachev– https://www.facebook.com/vdachev

• ДАВИД академия– [email protected]– http://acad.david.bg/– @david_academy– https://www.facebook.com/groups/david.academy/