ASP.NET MVC od zera do praktyki 4/16/2017 12:12 PM ASP.NET MVC od zera do praktyki Michał Żyliński michal.zylinski@microsoft.com ISV Developer Evangelist Microsoft Polska © 2007 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
ASP.NET na rozstaju dróg? Web Forms ASP.NET AJAX ASP.NET MVC ASP.NET Dynamic Data ASP.NET Framework .NET Framework
ASP.NET „Classic”
MVC – smacznie i zdrowo … czyli jak zjeść ciastko i mieć ciastko View …i cała reszta Controller Model
Trochę teorii Krok 1 Żądanie z przeglądarki trafia do kontrolera MGB 2003 Trochę teorii Kontroler Żądanie Krok 1 Żądanie z przeglądarki trafia do kontrolera © 2003 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
MGB 2003 Trochę teorii Model Kontroler Żądanie Krok 2 Kontroler przetwarza żądanie wykorzystując logikę biznesową zawartą w modelu © 2003 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
Trochę teorii Krok 3 Dane z modelu przekazywane są do widoku Żądanie MGB 2003 Trochę teorii Kontroler Żądanie Widok Krok 3 Dane z modelu przekazywane są do widoku © 2003 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
MGB 2003 Trochę teorii Kontroler Żądanie Widok Krok 4 Widok zajmuje się wizualizacją danych pochodzących z modelu © 2003 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
Trochę teorii Krok 5 Serwer zwraca odpowiedź do przeglądarki Żądanie MGB 2003 Trochę teorii Kontroler Żądanie Widok Odpowiedź Krok 5 Serwer zwraca odpowiedź do przeglądarki © 2003 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
Dlaczego ASP.NET MVC ?
Dlaczego ASP.NET MVC a nie ASP.NET Pełna kontrola nad HTML: Brak ViewState I CodeBehind Większy porządek w architekturze Elastyczność i rozszerzalność TDD jako jeden z głównych filarów Bliższe koncepcyjnie typowemu programiście WWW ASP.NET ASP.NET MVC Łatwość użycia Kontrola
Dlaczego ASP.NET MVC a nie RoR, Django itd. Te same usługi, które dostępne są w ASP.NET: Zarządzanie użytkownikami (role, profile…) Zarządzanie stanem sesji i aplikacji Konfiguracja (web.config) Mechanizmy cache Mechanizmy lokalizacyjne Master i content pages Kontrolki użytkownika Obiekty bazowe: HttpContext, HttpRequest, HttpResponse Designer
… bez użycia klawiatury! Demo {Hello World} … bez użycia klawiatury!
Scenariusz Planeta Microsoft Cel: Agregator kanałów RSS gromadzący informacje o technologiach Microsoft Funkcjonalność: Prezentowanie (ujednoliconej) listy wpisów Możliwość dodawania nowych kanałów jako administrator
Model danych + tabele systemowe
Szkielet wizualny Lewa kolumna Prawa kolumna Treść Nawigacja Nagłówek Stopka
Przyjazne adresy URL /Home – wyświetlenie strony głównej /Home/Search – wyniki wyszukiwania /Home/Search/{phrase} /Home/Feed/{FeedId} – wpisy z pojedynczego kanału
Routing W pełni konfigurowalna centrala telefoniczna Konfiguracja w pliku global.asax 2 scenariusze: Ścieżka Zasób Zasób Ścieżka
Routing Ścieżka to: URL (z ew. parametrami) Wartości domyślne Więzy – walidatory wykorzystujące np. wyrażenia regularne lub typ żądania HTTP Tabela ścieżek Kolekcja ścieżek Ścieżka Ścieżka Ścieżka Route reportRoute = new Route("{locale}/{year}", new ReportRouteHandler()); reportRoute.Defaults = new RouteValueDictionary { { "locale", "en-US" }, { "year", DateTime.Now.Year.ToString() } }; reportRoute.Constraints = new RouteValueDictionary { { "locale", "[a-z]{2}-[a-z]{2}" }, { "year", @"\d{4}" } };
Demo Routing
Kontroler i akcja Kontroler: Akcja: Klasa, której część metod będzie dostępna dla przeglądarki Ma przyrostek Controller Implementuje interfejs IController lub jest potomkiem klasy Controller Akcja: Metoda publiczna klasy kontrolera zwracająca typ ActionResult (lub void) Jej rezultatem może być m.in. ViewResult, JsonResult, RedirectResult czy RedirectToRouteResult
Widok Możliwość wymiany silnika szablonów Wyświetla dane dostarczone przez kontroler Podstawy składni: <% {dowolny kod} %> Np. <% if (…) %> <%= {dowolny kod zwracający rezultat tekstowy} %> Np. <%= Model.Name %> W standardowej implementacji bardzo zbliżony do ASP.NET .aspx .master .ascx Możliwość wymiany silnika szablonów
Demo Struktura serwisu
HTML Helpers Zbiór metod, ułatwiających życie projektantom widoków Odpowiedzialne (pół)automatyczne generowanie kodu HTML Najpopularniejsze stanowią składnik samej platformy, np.: Html.ActionLink, Html.Encode, Html.TextBox, Html.RenderPartial
Własny HTML helper Biblioteka helperów pozwala na rozszerzanie Własny helper = dowolna metoda zwracająca wartość tekstową Implementacja poprzez metodę statyczną lub metodę rozszerzającą (extension method) (Po zaimportowaniu w szablonie) stanie się standardowo dostępna w Intellisense
Demo Własny HTML Helper
Przekazywanie danych do widoku ViewState Kolekcja dowolnych obiektów, kluczem jest wartość tekstowa Wymaga rzutowania Kontroler: ViewState[„Wiek”] = 10; Widok: <%= (ViewState[„Wiek”] as int) %>
Przekazywanie danych do widoku Model – przekazujemy do widoku konkretny obiekt biznesowy W widoku wykorzystujemy słowo kluczowe Model Mocno typowane Kontroler: return View(User); Widok: Użytkownik: <%= Model.Name %> Wiek: <%= Model.Age %>
Przekazywanie danych do widoku ViewModel Podejście architektoniczne eliminujące ograniczenia ViewState i Model Przygotowanie/rozszerzenie modelu o właściwości wykorzystywane przez Model Model ViewModel View
Obsługa formularzy Walidacja danych: Kontroler: ModelState – słownik zawierający rezultat walidacji modelu Widok: Html.ValidationMessage – walidacja pojedynczego pola formularza Html.ValidationSummary – raport zbiorczy Projekt xVal (http://xval.codeplex.com/) Przykład: ModelState.AddModelError(„Name”, „Nieprawidłowa nazwa”) ModelState.IsValid
Obsługa formularzy Aktualizacja danych -> ręcznie lub przez UpdateModel ModelBinders - możliwość wiązania pól formularzy z modelem: Dzięki Bogu mamy też scaffolding Przykład: public ActionResult Save(Person person) { UpdateModel(person, new[] {„Name”, „Password”}); }
Demo Obsługa formularzy
Action Filters Uzupełnienie akcji (lub całego kontrolera) o specyficzną, uniwersalną funkcjonalność Typy filtrów: Filtry autoryzacji Filtry akcji Filtry odpowiedzi Filtry wyjątków Typowe zastosowania: Kontrola dostępu Obsługa błędów Cache’owanie stron Logowanie zdarzeń
Demo Action Filters
Kontrola dostępu Domyślnie wykorzystuje usługi Membership i Role Zarządzanie kontami użytkowników Gotowy filtr Authorize Ograniczanie dostępu do akcji w oparciu o nazwy użytkowników lub ról
Demo Kontrola uprawnień
Wersje językowe Zasoby (resources) – tak samo, jak w ASP.NET Lokalne lub globalne Prosta struktura klucz=wartość Nie tylko prosty tekst, ale też grafika i inne Automatycznie wykorzystuje mechanizm ustawień językowych przeglądarki WWW Przykład wykorzystania: <%= Nazwa_zasobu.Klucz %> Np. <%= Resources.AboutUs %>
Demo Lokalizacja
Korzystanie z Ajaxa Helpery prawie jak UpdatePanel Ajax.ActionLink(tekst, akcja, parametry, opcje wywołania) Obsługiwane przez Microsoft Ajax Library Standardowo na pokładzie również biblioteka JQuery (v.1.3.1) W pełni wspierana przez Visual Studio i Microsoft
Ajax prawie jak w ASP.NET Demo Ajax prawie jak w ASP.NET
Testy Pełne wsparcie dla TDD – gotowy projekt dla unit testów Współpraca z zewnętrznymi narzędziami (np. NUnit, Moq) http://www.mockframeworks.com/moq Osobiście zacząłbym od warstwy modelu
Uwagi praktyczne MVC nie wymusza dobrych praktyk – o nie należy zadbać samemu Choćby IOC niezbędne dla dobrych testów aplikacji Uwaga na wielkość kontrolera! Warstwa biznesowa to nie tylko automatycznie wygenerowane klasy Warto eksperymentować – ASP.NET MVC jest z założenia otwartą platformą Dowolny ORM Dowolny silnik szablonów Dużo projektów towarzyszących
Wdrożenia na świecie Kelley Blue Book http://www.kbb.com Wyszukiwarka ofert motoryzacyjnych (samochody nowe i używane) 12 mln odwiedzin miesięcznie
Wdrożenia na świecie Stack Overflow http://www.stackoverflow.com Społecznościowa baza pytań i odpowiedzi dla programistów Założona przez Joela Spolsky’ego
Wdrożenia w Polsce Cineman http://www.cineman.pl Największe w Polsce kino internetowe, działające od 2007 r. Całkowita przebudowa serwisu z platformy LAMP
Wdrożenia w Polsce Delikatesy internetowe A.pl http://www.a.pl Sklep internetowy spółki Action S.A. „ASP.NET MVC znacznie ułatwia dodawanie nowych funkcjonalności, nie ogranicza twórców serwisów we wdrażaniu nowych pomysłów i sprawia, że utrzymanie kodu i zarządzanie całym projektem jest o wiele łatwiejsze” – Jakub Milewski, koordynator działań e-commerce w A.pl
Podsumowanie Możliwość wyboru Testy Elastyczność SEO
4/16/2017 12:12 PM © 2008 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION. © 2007 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.