1. Michał Jaskólski
http://www.jaskolski.com.pl
PODSTAWY ASP.NET MVC 1.0
W 3600 SEKUND
2. MVC jako takie
MVC = Model View Controller
Może być postrzegany jako wzorzec
architektoniczny lub jako wzorzec projektowy.
Jako wzorzec architektoniczny nieodłącznie
kojarzony z wielowarstwową architekturą aplikacji.
Jako wzorzec projektowy – zdarzeniowy model
aplikacji.
Stosowanie MVC wymusza systematyzację kodu i
określenie jasnej struktury programu.
Umożliwia rozdzielenie warstwy prezentacyjnej od
warstwy danych i logiki biznesowej.
Systematyzacja ułatwia testowanie.
3. ASP.NET MVC 1.0
Spojrzenie na MVC oczami wielkiego brata
zza oceanu.
Zrywa niemal całkowicie z dotychczasową
metodologią pisania aplikacji z użyciem
ASP.NET Web Forms, jednak „pod maską”
nadal opiera się na podstawowych
mechanizmach ASP.NET.
Praktycznie eliminuje możliwość używania
dotychczasowych kontrolek ASP.NET
4. ASP.NET MVC 1.0...
Renderowanie zawartości widoków odbywa
się za pomocą HTML Helpers.
Wbudowana klasa TagBuilder ułatwia pisanie
własnych pomocników.
… a na dodatek doskonałe wsparcie dla mniej
lub bardziej podstawowych zadań
związanych z tworzeniem aplikacji opartych o
MVC z poziomu Visual Studio
Wsparcie dla testowania aplikacji za pomocą
testów jednostkowych.
5. Model
Model = obiekt(y)
Obiekty (klasy) implementują logikę związana z
zachowywaniem stanu obiektu (w
bazie, plikach, gdziekolwiek) oraz zawierają
właściwości odzwierciedlające ich rzeczywiste
znaczenie.
W ASP.NET MVC:
Implementacja wlasna
Linq 2 SQL
ADO.NET Entity Framework
…
6. Widok
Komponent odpowiedzialny za tworzenie
interfejsu użytkownika.
Interfejs użytkownika tworzony jest na
podstawie przekazanych danych modelu.
Wizualizuje model.
Zapewnia graficzny interfejs odwołujący się do
akcji kontrolera.
W ASP.NET MVC:
Strony ASPX
Kontrolki użytkownika ASCX (widoki częściowe)
7. Kontroler
Komponenty odpowiedzialne za reakcję na akcje
użytkownika.
W odpowiedzi na działanie podjęte przez
użytkownika dokonują operacji na modelu oraz
wybierają i tworzą widok do przedstawienia
użytkownikowi jako wynik jego działania.
W ASP.NET MVC:
Klasy (ich instancje) które przetwarzają wartości z
żądań HTTP (query string, dane POST) i na ich
podstawie podejmują stosowne działanie.
11. Akcje
Mapowanie żądań HTTP na metody klasy kontrolera.
Rozróżnienie GET a POST (atrybut AcceptVerbs –
domyślnie HttpVerbs.Get).
Automatyczne mapowanie parametrów żądania na
parametry metod.
Dla żądań POST możliwość zmapowania danych na obiekt.
Akcja kończy się wynikiem – ActionResult
Jeżeli metoda skojarzona z akcją nie zwraca obiektu
dziedziczącego z ActionResult, wynik automatycznie jest
konwertowany na łańcuch i „ubierany” w ContentResult.
12. Akcje...
Aby metoda kontrolera stałą się akcją:
Musi być publiczna.
Nie może być statyczna.
Nie może być metodą rozszerzającą (extension
method)
Nie może to być konstruktor ani metody właściwości.
Metoda nie może być generyczna.
Metoda nie może być metodą klasy bazowej
kontrolera.
Metoda nie może zawierać parametrów out lub ref.
Aby metoda nie była akcją – atrybut NoAction
13. Akcje – bindowanie danych
Kontrolowanie sposobu bindowania danych z
żądania POST z obiektem modelu danych.
Gdy obiekt występuje jako parametr akcji -
mapowanie można kontrolować za pomocą atrybutu
Bind nadanego parametrom metody
([Bind(Exclude=quot;Id„, Include=„Name,Description”)]).
Gdy używamy metody UpdateModel –
UpdateMode(mode, new string[] { „Name”,
„Description”})
Atrybut Bind można przypisać do typu, aby
kontrolować proces wiązania globalnie.
14. Akcja – reakcja - wynik
ViewResult (View)– wynikiem jest widok.
EmptyResult – brak wyniku.
RedirectResult
(Redirect, RedirectToRoute, RedirectToAction) –
przeniesienie pod inny adres.
JsonResult (Json)– wynikiem są dane zwrócone w postaci
JSON.
JavaScriptResult (JavaScript)– wynikiem jest zasób – skrypt
JS.
ContentResult (Content)– wynikiem jest zasób - tekst.
File*Result (File):
FileContentResult – wynikiem jest zasób binarny.
FilePathResult – wynikiem jest ścieżka do zasobu.
FileStreamResult – wynikiem jest strumień zasobu.
15. Walidacja
ModelState.IsValid
ModelState.AddModelError
Html.ValidationMessage()
Html.ValidationSummary()
Ponownie atrybut Bind – uniknięcie błędów,
które nie są błędami.
IDataErrorInfo – „stary” interfejs .NET, jeżeli
klasa go implementuje – ASP.NET MVC zrobi
z niego użytek.
16. ASP.NET MVC Routing
Zapewnia mapowanie / rewriting URLi na
wywołania odpowiednich akcji wskazanych
kontrolerów
ASP.NET daje możliwość tworzenia:
Własnych reguł „trasowania”.
Stosowania obostrzeń dla parametrów trasy
(wyrażenia regularne).
Implementację własnych obostrzeń –
IRouteConstraint.
17. Widoki
Widok można stworzyć na kilka sposobów:
Ręcznie
Z lekką pomocą Visual Studio.
Automagicznie
Widoki ściśle typizowane: System.Web.Mvc.ViewPage<T>
Widoki częśćiowe (Html.RenderPartial) – także typizowane:
System.Web.Mvc.ViewUserControl<T>
Dla widoków ściśle typizowanych właściwość Model jest
typu T.
ViewData – dane dodatkowe poza danymi modelu.
Model SelectList
Integracja HtmlHelper z stanem modelu
18. Filtry akcji kontrolera
Modyfikacja sposobu wykonania się akcji kontrolera.
Aplikowane w sposób deklaratywny jako atrybuty
metod kontrolera.
Umożliwiają np.:
Implementacje własnych metod autoryzacji.
Modyfikację danych widoku.
…
Standardowe np.:
Authorize
HandleError
OutputCache
19. Filtry akcji kontrolera...
Cztery kategorie filtrów:
Autoryzacyjne - IAuthorizationFilter – implementacja autoryzacji
i autentykacji dla akcji kontrolera. Wykonywane PRZED akcją.
Akcji - IActionFilter – wykonywane PRZED i PO akcji – można
zastosować np. do modyfikacji danych widoku zwracanych przez
akcję.
Wyniku - IResultFilter - wykonywane PRZED i PO akcji –
umożliwiają modyfikacje widoku przed jego wyrenderowaniem.
Wyjątków – IExceptionFilter -
Filtry są wykonywane w wyżej wymienionej kolejności.
Kolejność wykonywania filtrów z tej samej kategorii można
ustalić za pomocą właściwości Order.
21. Ficzersy
Separacja funkcjonalna aplikacji (logika
biznesowa, UI, dane).
Platforma rozszerzalna – wiele komponentów ASP.NET
MVC może być w łatwy sposób poszerzona lub
podmieniona.
Ułatwione testowanie aplikacji.
Potężne możliwości mapowania URL (SEO, REST).
Możliwość wykorzystania ASPX, ASXC, Master Pages jako
UI.
Możliwość wykorzystania istniejących w ASP.NET
mechanizmów
(autoryzacja, autentykacja, członkostwo, role, sesja, cache,
profile, konfiguracja, …).
Wsparcie dla AJAX.
22. Zalety
Podział na warstwy ułatwia panowanie nad
złożonymi projektami.
Zapewnia programiście pełną kontrolę nad
działaniem programu – nie używana jest
skomplikowana logika Web Forms.
Aplikacje pisane z użyciem ASP.NET MVC są
lżejsze dla strony klienckiej – brak ViewState.
Możliwość tworzenia zaawansowanego
routingu / URLi przyjaznych dla użytkownika.
Wsparcie dla TDD (Test Driven Development).
23. Wady
Zupełnie inny model niż Web.Forms
(zdarzeniowy).
Brak możliwości wykorzystania
dotychczasowych kontrolek.
Brak ViewState – konieczność ładowania danych
widoku za każdym razem, gdy są one potrzebne.
Dla małych aplikacji wprowadza stosunkowo
dużo formalizmu (ale pamiętajmy, że małe
aplikacje często dojrzewają ).
W wielu sytuacjach wymaga pisania większej
ilości kodu.