You are on page 1of 20

Architektura MVC w ASP.

NET
Autor wykadu:
Marek Wojciechowski
ASP.NET (2)
Modele programistyczne ASP.NET
Web Forms
Komponentowy interfejs uytkownika (kontrolki)
Programowanie wizualno-zdarzeniowe
Klasyczna skadnia ASP.NET
ASP.NET MVC
Implementacja wzorca MVC
Klasyczna skadnia ASP.NET lub silnik Razor
Web Pages
Proste aplikacje webowe jak w PHP lub starym ASP
Skadnia Razor

ASP.NET
Web Forms ASP.NET MVC Web Pages
ASP.NET (3)
ASP.NET Web Pages
Najnowszy i najprostszy model programistyczny
framework do tworzenia dynamicznych stron
internetowych w stylu PHP i klasycznego ASP
wykorzystuje skadni i silnik Razor
(ASP.NET Web Pages 2)
open source
tworzone w Visual Studio lub darmowym rodowisku
WebMatrix
oparte o silnik widokw (ang. view engine) Razor
obsugiwane jzyki programowania: C# i Visual
Basic (rozszerzenia stron .cshtml i .vbhtml)
ASP.NET (4)
Silnik widokw Razor
ASP.NET MVC od pocztku wspiera koncepcj
silnikw widokw moduw implementujcych rn
skadni szablonw stron
Spark i NHaml jako przykady silnikw szablonw
do uycia w ASP.NET MVC zamiast tradycyjnego,
znanego z Web Forms, silnika ASP.NET
Razor opracowany dla MVC3, stosowany rwnie
w MVC4, ale te w ASP.NET Web Pages 2
Cechy silnika Razor
przejrzysty kod bazujcy na jzykach C# i VB
zwarta i przejrzysta skadnia: @{}, @wyraenie
inteligentny parser umoliwia naturalny przeplot
HTML z jzykiem programowania
wspiera IntelliSense, unit tests, layouts
helpery do generacji formularzy HTML
ASP.NET (5)
ASP.NET Web Pages Przykad (1/2)
@{
var title = Request.QueryString["title"];
if (String.IsNullOrEmpty(title)) { title = "Razor Web Page"; }
var count = Request["count"].AsInt(1);
}
<html>
<head><title>@title</title></head>
<body>
<form method="post">
First name: @Html.TextBox("name", @Request["name"])
# of greetings: @Html.TextBox("count", @count)
<input type="submit" value="Submit" />
</form>
@{
if(IsPost) {
for(int i = 0; i < count; i++) {
<p>Hello @Request.Form["name"]!</p> } }
}
</body></html>
Test.cshtml
ASP.NET (6)
ASP.NET Web Pages Przykad (2/2)
ASP.NET (7)
ASP.NET MVC
Framework firmy Microsoft dla ASP.NET
oparty o wzorzec Model-View-Controller (MVC)
pierwsza wersja produkcyjna: marzec 2009
przedstawiany jako alternatywa dla Web Forms,
a nie nastpca
aktualna wersja MVC4
open source (licencja MS-PL)
darmowy
w peni wspierany
od wersji MVC3 oferuje silnik widokw Razor jako
alternatyw dla klasycznej skadni ASP.NET
ASP.NET (8)
Zalety ASP.NET MVC
Pena kontrola nad generowanym kodem HLML
Embrace HTTP and HTML - don't hide it
brak view state i formularzy po stronie serwera
Bogate moliwoci integracji z Ajax
Intuicyjne adresy URL w aplikacji
RESTful i przyjazne wyszukiwarkom
Podzia kompetencji i odpowiedzialnoci komponentw
aplikacji (ang. separation of concerns)
Testowalno
wsparcie dla Test-Driven Development (TDD)
Nacisk na zarzdzanie nawigacj w aplikacji
wzorzec Front Controller, routing
ASP.NET (9)
Web Forms na tle ASP.NET MVC
Abstrakcja od HTML i HTTP
view state, postbacks, kontrolki, cykl ycia strony
uatwia programistom szybki start
trudno porzdnie implementowa due systemy
mniej kodu
RAD, mae zespoy projektowe
Orientacja na stron jako atomow jednostk aplikacji
Website jako domylny sposb organizacji kodu w VS
cisy zwizek nazwy pliku strony z adresem URL
trudne i mao wydajne testowanie aplikacji
wzorzec Page Controller
ASP.NET (10)
Role komponentw w ASP.NET MVC
Models
komponenty odpowiedzialne za pamitanie stanu
stan czsto utrwalany w bazie danych
Views
komponenty odpowiedzialne za wywietlanie
interfejsu uytkownika aplikacji
widok moe by tworzony kreatorem w oparciu
o model (CRUD scaffolding)
Controllers
komponenty odpowiedzialne za obsug interakcji
z uytkownikiem, manipulowanie modelem i wybr
widoku do wywietlenia
ASP.NET (11)
Struktura projektu ASP.NET MVC
Nowo utworzony projekt zawiera zacztek aplikacji, ktry
mona nastpnie dostosowa i rozwin
szablon strony (master page)
domylna regua routingu
obsuga logowania uytkownikw
proste kontrolery i widoki
opcjonalnie towarzyszcy projekt
do testw jednostkowych
ASP.NET (12)
Aplikacja startowa ASP.NET MVC
ASP.NET (13)
Routing
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
...
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with params
new { controller = "Home", action = "Index", id = "" } // Param defaults
);
}

protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
}
}
Global.asax.cs
ASP.NET (14)
Controller
public class HomeController : Controller
{
public ActionResult Index()
{
ViewData["Message"] = "Welcome to ASP.NET MVC!";

return View();
}

public ActionResult About()
{
return View();
}
}
HomeController.cs
ASP.NET (15)
View
<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master"
Inherits="System.Web.Mvc.ViewPage" %>
...
<asp:Content ID="indexContent" ContentPlaceHolderID="MainContent"
runat="server">
<h2><%= Html.Encode(ViewData["Message"]) %></h2>

<p>
To learn more about ASP.NET MVC visit <a href="http://asp.net/mvc"
title="ASP.NET MVC Website">http://asp.net/mvc</a>.
</p>
</asp:Content>
Index.aspx
ASP.NET (16)
Master Page
<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage" %>
...
<div id="menucontainer">

<ul id="menu">
<li><%= Html.ActionLink("Home", "Index", "Home")%></li>
<li><%= Html.ActionLink("About", "About", "Home")%></li>
</ul>

</div>

<div id="main">
<asp:ContentPlaceHolder ID="MainContent" runat="server" />
</div>
...
Site.Master
Obecnie (dla silnika widokw Razor i C#): _Layout.cshtml
ASP.NET (17)
Przekazywanie danych z kontrolera do
widoku
ViewData, ViewBag (od MVC 3)
Dane dostpne w ramach pojedynczego dania nie
przetrwaj operacji Redirect
ViewData["klucz"], ViewBag.klucz
TempData
Dane przetrwaj operacj Redirect
TempData["klucz"]
Wewntrznie wykorzystuje sesj HTTP
View models i strongly typed views
Obiekty modelu przekazywane do widoku
Rozwizanie zalecane

ASP.NET (18)
Ochrona przed atakami CSRF
Cross Site Request Forgery (CSRF, XSRF)
atak wykorzystujcy zaufanie serwisu do przegldarki
uytkownika (danie z przegldarki zalogowanego
uytkownika, podrzucone mu z innego serwisu)
Mechanizm obrony w ASP.NET MVC poprzez
Anti-Forgery Token
generowana losowo informacja doczona do
formularza w polu ukrytym i jednoczenie ustawiana
jako cookie
po odebraniu formularza wysanego z przegldarki
test zgodnoci tokena z pola ukrytego i cookie
ASP.NET (19)
AntiForgeryToken w ASP.NET MVC
<% using (Html.BeginForm()) {%>
<%= Html.AntiForgeryToken() %>
<! elementy formularza
<% } %>
widok z formularzem
[ValidateAntiForgeryToken]
public ActionResult Akcja(FormCollection form)
{
...
}
kontroler przetwarzajcy dane z formularza
ASP.NET (20)
Podsumowanie
ASP.NET MVC to nowy framework dla ASP.NET
oferowany przez Microsoft
implementacja architektury MVC
zastosowanie podej zalecanych w duych projektach
separation of concerns
test-driven development
Powrt do korzeni: HTML i HTTP
niekiedy przypomina ASP: <% %>
wsparcie dla REST; helpery uatwiajce kodowanie
Ma stanowi alternatyw dla Web Forms
kade z rozwiza ma zalety i wady
naley wybra framework odpowiedni dla
realizowanego projektu i kompetencji programistw

You might also like