Systemy internetowe ASP.NET mgr inż. Andrzej Sobecki
Plan wykładu Wprowadzenie do ASP.NET Omówienie środowiska pracy Przykładowy projekt Omówienie komponentów składowych projektu ASP.NET Utworzenie i omówienie cech przykładowego przekierowania Charakterystyka możliwości środowiska ASP.NET
Wprowadzenie do ASP.NET Środowisko do wytwarzania serwisów internetowych (pierwotnie ASP+) Strony ((X)HTML) podobne JSP, PHP, ASP Częściowa separacja kodu funkcyjnego od prezentacji Dodanie modelu Code-behind (Plik.aspx.cs lub Plik.aspx.vb) Dyrektywy <%@ %> - charakterystyka danej strony
Wprowadzenie do ASP.NET Przetwarzanie stron wg ustalonego cyklu (Page LifeCycle)
Wprowadzenie do ASP.NET
Wprowadzenie do ASP.NET ViewState
Omówienie środowiska pracy Microsoft Visual Developer 2010 EE.NET 4.0 MS SQL 2008 R2 EE Można wykorzystać platformę Web Installer www.microsoft.com/web
Przykładowy projekt File -> New Project -> ASP.NET Web Application Pokaz i omówienie przykładowego projektu
Elementy składowe projektu Web.config (globalne + lokalne) Global.asax MasterTemplate Strony + CodeBehind Kontrolki Designer
Elementy składowe projektu Struktura folderów App_code pre-compiled code App_data statyczne bazy danych App_LocalResources pliki pomocnicze np. z tłumaczeniami: MusicList.aspx.pl-PL.resx App_GlobalResources przechowuje pliki resx; wartości słownikowe App_Themes przechowuje pliki definiujące wygląd Bin skompilowana wersja aplikacji
Przekierowania Metody na definiowanie przekierowań: Hyperlinki (nie przenosi stanu strony, możliwość przekierowań poza projekt, przesyłanie danych definiowanie w QueryString) Cross-page posting (przesyła stan strony i informacje w niej zawarte do kolejnej, formularze i inne, możliwe przekierowanie do stron spoza projektu) Browser redirect (prawie swobodny redirect, żądanie HTTP GET) Server transfer (render innej strony w miejscu aktualnie wyświetlanym, ukrywanie url przed userem)
Przykład przekierowania zaawansowanego Najbardziej swobodne z przekierowań + przesyłanie wartości parametrów Design: <asp:linkbutton ID="LinkButton1" runat="server" onclick="linkbutton1_click">nasz link button</asp:linkbutton> Code-behind: Session["test"] = "Wartość nr 1 ; Response.Redirect("~/About.aspx"); Odbiór parametru: <%= (string)session["test"] %> <br /> Inna opcja modyfikacja url np.: String url = strona.aspx?par1=xx&par2=yy Response.Redirect(url); Odbiór: (string) Request.QueryString[ par1 ];
Charakterystyka możliwo liwości środowiska ASP.NET rodowiska ASP.NET Środowisko przewidziane dla aplikacji codziennych, bez wyróżników Elementy dostosowane do wyklikania standardowych reakcji na akcję użytkownika Słaba kontrola przepływu danych Mała zdolność do tworzenia projektów średnich i dużych Środowisko przeznaczone do szybkiego wytwarzania prostych aplikacji internetowych
Serwisy internetowe ASP.NET MVC mgr inż. Andrzej Sobecki
Plan prezentacji Omówienie wzorca projektowego MVC Omówienie ORM Omówienie MVVM Omówienie procesu wytwórczego systemów internetowych w rzeczywistym środowisku produkcyjnym Charakterystyka i omówienie szablonu ASP.NET MVC Różnice w przetwarzaniu żądań pomiędzy ASP.NET i ASP.NET MVC Struktura projektu ASP.NET MVC 2
Wzorzec MVC Rozdzielenie kodu na części Model: metody i obiekty związane z wymianą i obsługą danych z bazą danych View: zestaw operacji, szablonów i styli umożliwiający wygenerowanie widocznej części aplikacji Controller: serce projektu, logika biznesowa, funkcje, które generują dochód projektu
Różnice w przetwarzaniu żąda dań
Warstwa ORM ORM (ang. Object Related Model) Warstwa pośrednicząca w wymianie danych między projektem, a silnikiem baz danych Oddzielenie zapytań w określonym języku bazodanowym od reszty aplikacji Możliwość posługiwania się dobrze zdefiniowanym interfejsem i obiektami, które są z nim związane Dysponowanie po stronie kodu aplikacji zbiorem obiektów, typów i funkcji, które umożliwiają działanie na bazie danych
Warstwa ORM Jak działa ORM? Aplikacja Getery; setery; LINQ SELECT * ; INSERT ; UPDATE ORM Baza danych Wartość, wartości, klasa wypełniona wartościami Wartość, Wartości, Widok
Warstwa ORM Zalety ORM Developer operuje w całym projekcie wyłącznie na obiektach Brak konieczności znajomości zapytań SQL dla podstawowych operacji Utrzymywanie połączeń i zarządzanie nimi Wstępna ochrona przed atakami SQL Injection Wady ORM Występowanie problemów z wydajnością Konieczność wprowadzania ręcznych zmian w ORM w przypadku bardziej skomplikowanych zapytań
Warstwa ORM Przykład z użyciem LINQ: cerset cr = (cerset)(from c in hdb.cersets where c.machine_id == ms.id orderby c.created_at descending select c).firstordefault();
Warstwa ORM (ASP.NET) Uwaga domyślnie dostępne są dwie metody linkowania do bazy danych: ADO.NET Entity Data Model (EDMX) (duża automatyzacja, wiele problemów z użyciem) LINQ to SQL Classes (DBML) (mała automatyzacja, konieczność ręcznego zarządzania polami podczas zmian, w zasadzie bezproblemowy)
Warstwa MVVM Model View ViewModel Warstwa pośrednicząca w komunikacji pomiędzy kontrolerem i widokiem Klasa zawierająca komplet danych i dodatkowe pola na wybór Wyłączny element wymiany danych Widoki silnie typowane klasą (MVVM)
Omówienie procesu wytwórczego systemów w internetowych Prace wstępne (specyfikacja, plan modułów, technologia) Przypisanie osób do zadań Utworzenie testów jednostkowych (TDD) Tworzenie poszczególnych modułów 80 % projektu zabiera 20 % czasu Poprawki, dopracowanie, dodatki to 20 % projektu, który zajmuje najwięcej czasu Poprawki i zmiany w gotowym kodzie najczęściej powodują błędy (stąd wykorzystanie TDD)
Charakterystyka i omówienie ASP.NET MVC Pełna kontrola przez HTML TDD, IoC Wyłączenie z użycia wielu kontrolek, zalecane Html. oraz Ajax. Elementy stron należy wprowadzać ręcznie Dużo więcej JS po stronie widoku (jquery, DOJO, PrototypeJS) Odrzucono utworzone wcześnie metody przekierowań Cykl w ramach żądań został uproszczony
Charakterystyka i omówienie ASP.NET MVC Brak automatycznego zapisywania stanów stron (stateless) Manualne zarządzanie elementami przetrzymywanymi w cache i sesji Kod jest izolowany w zależności od kontekstu, bardziej związany wyłącznie z interfejsem Adresy i mechanizmy przejść przyjazne SEO i pagerank
Różnice w przetwarzaniu żąda dań
Struktura projektu MVC 2 Pokaz Visual Studio EE
Serwisy internetowe ASP.NET mgr inż. Andrzej Sobecki
Plan wykładu Pliki konfiguracyjne Tworzenie nowych kontrolerów Tworzenie nowych akcji Wymiana danych pomiędzy kontrolerem, a widokiem Sposób na uwierzytelnianie Wykorzystanie modelu do komunikacji z bazą danych Transakcje Szablony stron (MasterPage) Helpery Biblioteki i referencje Testy jednostkowe Wdrażanie na serwer docelowy
Pliki konfiguracyjne Web.config Podpięcie i konfiguracja bibliotek, baz danych, modułów uwierzytelniania i innych Global.asax.cs Wykorzystywany do definiowania routingu i podpięcia funkcji wywoływanych za każdym razem przy przejściach adresu
Tworzenie nowych kontrolerów Klasa umiejscowiona w folderze Controllers (domyślnie) Nazwa klasy XxxxController Dziedziczy z klasy Controller
Tworzenie nowych akcji Funkcja typu ActionResult Zwraca View() - ew. z parametrami Istnieje możliwość atrybutowania jej definiując wymaganą role, użytkownika, typ żądania i inne Parametry funkcji muszą być zgodne z żądaniem do niej skierowanym brak dopasowania generuje błąd Parametrami mogą być typy generyczne jak również samodzielnie przygotowane klasy
Wymiana danych kontroler-widok Kontroler: return View(obiekt klasy) return RedirectToAction( Akcja, Kontroler ) return PartialView( Akcja, obiekt) ViewData[ klucz ] = wartość Widok: Widoki silnie typowane Formularze na podstawie klasy widoku (wszystko co użytkownik wpisze zostanie przesłane w tej klasie, uwaga!! To czego sami nie przepiszecie w polach ukrytych zostanie usunięte przed requestem) ViewData[ klucz ] = wartość
Sposób b na uwierzytelnianie Wymagania wobec systemu zarządzania użytkownikami Pamięta stan Pamięta role usera Pamięta inne dane usera Potrafi zweryfikować podane dane Możliwa jest rejestracje i swobodne operowanie na wartościach Współpracuje z systemem atrybutów ASP.NET MVC Rozwiązanie: Przeciążenie klas MembershipUser, RoleProvider, MembershipProvider Rejestracja swoich klas w web.config (w aplikacji)
Wykorzystanie modelu do komunikacji z bazą danych var dane = from d in hdb.inspectionsets join m in hdb.machinesets on d.machine_id equals m.id join u in hdb.users on d.user_id equals u.id join cu in hdb.users on d.user_id equals cu.id join s in hdb.statussets on d.status_id equals s.id equals ii.id join ii in hdb.inspection_instructionsets on d.inspection_instruction_id where (d.user_id == user_id d.checking_user_id == user_id) && s.name.equals("new") && s.name.equals("to Verify") && d.date <= datado && d.date >= new DateTime(DateTime.Now.Year -1, DateTime.Now.Month, DateTime.Now.Day) orderby s.name ascending, d.date ascending select new { pole1, pole2, pole3, pole4 = s.pole_z_bazy };
Transakcje Należy utworzyć własny mechanizm kontroli przebiegu zapytań Np. jako atrybut nad akcje Nasza klasa powinna dziedziczyć z ActionFilterAttribute Należy utworzyć obiekt typu CommittableTransaction Zainicjować go przed akcją w funkcji OnActionExecuting( ) Sprawdzić wyjątki w funkcjach OnActionExecuted i OnResultExecuted
Szablony stron MasterPage Tworzymy szablon stron, który posiada z góry zdefiniowane pozycje elementów i podpięte biblioteki np. jquery Najczęściej w View/Shared/ Prawie sam XHTML poza wstawkami, które wskazują rodzaj elementu do wyświetlenia: <% Html.RenderAction("Menu", RodzajUsera"); %> <% Html.RenderPartial( PartialZCzasem"); %> Oraz wskazują miejsca gdzie można będzie wpisać zawartość swojej strony (aspx) <asp:contentplaceholder ID="MainContent" runat="server" > </asp:contentplaceholder>
Helpery Zastępowanie kodu html, funkcjami silnie typowanymi Klasy (publiczne i statyczne) umieszczane w katalogu Helpers Umieszczane w przestrzeni nazw System.Web.Mvc.Html Funkcja zwracająca String przyjmująca przynajmniej 1 argument: this HtmlHelper htmlhelper
Biblioteki i referencje Możliwość podłączenia tradycyjnych bibliotek do projektu ASP.NET MVC Możliwość wykorzystania referencji do zasobów systemowych zarejestrowanych w GAC Możliwość wykorzystania bibliotek COM Najczęściej stosowane: log4net Elmah
Testy jednostkowe Istnieje możliwość połączenia w jednym projekcie dwóch elementów: Serwisu internetowego Testów jednostkowych
Systemy internetowe ASP.NET mgr inż. Andrzej Sobecki
Plan wykładu Opis ASP.NET MVC 3 Wykorzystanie silnika Razor Podstawowe różnice względem MVC 2