1 Michal Augustýn Microsoft Most Valuable Professional2 dříve převážně desktopové aplikace rozmach internetu poptávka po webových vývojářích ASP.NET ...
Michal Augustýn www.augi.cz Microsoft Most Valuable Professional
dříve – převážně desktopové aplikace rozmach internetu –poptávka po webových vývojářích ASP.NET WebForms – snadný přechod - RAD mezitím jiné směry webového vývoje ASP.NET MVC – přijetí jednoho z jiných směrů
framework pro tvorbu webových aplikací reakce na úspěch návrhového vzoru MVC u webových aplikací (RoR, Django, Zend FW) respektuje bezstavovost HTTP plná kontrola nad HTML modulární, rozšiřitelný zdrojáky dostupné na CodePlexu ne-RAD vývoj není to náhrada WebForms
IIS ASP.NET
WebForms
MVC
Požadavek
GET http://domena.cz/produkt/zobraz/10
IIS
moduly
ASP.NET [ISAPI filter]
handler
moduly
Výsledek
…
request 1
response
routing
5
Controller 2-3 Model
4 View
[HandleError] public class HomeController : Controller { public ActionResult Index() { ViewData["Message"] = "Welcome to ASP.NET MVC!"; return View(); }
}
public ActionResult About() { return View(); }
určuje tvar url konfigurace v souboru Global.asax.cs pravidla se vyhodnocují v pořadí vložení mapuje zpracování url na kontroler a akční metodu umožňuje generování url výchozí nastavení: /Home/Product/20
routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = "" } // Parameter defaults );
třída odvozená od třídy Controller obsahuje akční metody (vrací ActionResult) 1. čte data z requestu 2. komunikuje s modelem 3. vybírá view a předává mu data k prezentaci Controller
Model
View
parametry requestu mapovány na vstupní parametry akční metody („deserializace“) public ActionResult Show(int id) { … }
Routovací parametry: controller, action, id POST parametry: product.Id, product.Name, product.Price public ActionResult Create(Product product) { … }
vlastní konverze - IModelBinder
slouží k zápisu výsledku do HttpResponse public abstract class ActionResult { public abstract void ExecuteResult(ControllerContext context); }
aspektové rozšíření akčních metod lze aplikovat i na controllery [Authorize(Roles = "Admin")] [OutputCache(CacheProfile="TestProfile")] [HandleError(View="Error")] public ActionResult Test() { return new EmptyResult(); }
public interface IAuthorizationFilter { void OnAuthorization(AuthorizationContext filterContext); }
public interface IActionFilter { void OnActionExecuting(ActionExecutingContext filterContext); void OnActionExecuted(ActionExecutedContext filterContext); } public interface IResultFilter { void OnResultExecuting(ResultExecutingContext filterContext); void OnResultExecuted(ResultExecutedContext filterContext); } public interface IExceptionFilter { void OnException(ExceptionContext filterContext); }
metody RenderAction a Action – volání akčních metod z view silně typový HTML helper: dříve: Html.TextBox(“Prop“) nyní: Html.TextBoxFor(m => m.Prop)
vylepšené serverové validace klientské validace (včetně podpory jQuery) areas – další úroveň
jednoduché čistý kód nutí správně strukturovat plná kontrola nad html zezačátku vyžaduje více znalostí
složitější model RAD, komponentový vývoj odstínění od stavovosti http ViewState, PostBack
http://asp.net/mvc http://haacked.com – Phil Haack http://weblogs.asp.net/ScottGu - ScottGu http://www.aspnetmvc.cz – snad už brzy http://forum.builder.cz – české fórum i o .NET