1 / 43

Plug & Play MVC MVC alustan laajennus Lenard Gunda

Plug & Play MVC MVC alustan laajennus Lenard Gunda. Esittely. Lenard Gunda lenard.gunda@fi.fujitsu.com Ohjelmisto arkkitehti , Fujitsu Services Oy blogi : http://rebuildall.umbraworks.net twitter: lenardg. Agenda. ASP.NET MVC Pipeline Demon esittely

deborah
Download Presentation

Plug & Play MVC MVC alustan laajennus Lenard Gunda

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Plug & Play MVC MVC alustan laajennus Lenard Gunda

  2. Esittely • Lenard Gunda • lenard.gunda@fi.fujitsu.com • Ohjelmistoarkkitehti, Fujitsu Services Oy • blogi: http://rebuildall.umbraworks.net • twitter: lenardg

  3. Agenda • ASP.NET MVC Pipeline • Demon esittely • KarttaLaajennuspisteisiinjademot

  4. MVC Pipeline ViewEngine HTTP request View ActionResult Routing Action method Route handler Controller HTTP response HTTP handler ControllerFactory

  5. MVC Pipeline Custom ViewEngine ViewEngine HTTP request View HtmlHelper extension methods ModelBinder ActionResult Routing Action method Filters Custom ActionResult Custom RouteBase Custom ActionInvoker Route handler Controller HTTP response Controller base class Custom ControllerFactory HTTP handler ControllerFactory

  6. Reitinosientunnistaminen • Miten reitin osat (routevalues) saadan HTTP pyynnön URL:sta? http://host.domain/application/controller/action/id controller action id Reitintiedot

  7. Reititys • Miksitarvitaanräätälöidytreitit? • Jos controller ja/tai action eivoidapäättääpelkästään URL:n perusteella • Jos jotainomaalogiikkaatarvitaan kun valitaanreitti • Jos reitityskielieivoiilmaistahaluttuareittimuotoa

  8. Reititys #2 Reitinnimi Oletusarvot • Monessa tilanteessa oletusreitit voivat ratkaista ongelmat, niillä pystyy ilmaisemaan paljon erilaisia tilanteita: • Voidaanluodatarvittavanmääränparametreja • Arvojavoidaanrajoittaa • * reitinosa: kaikki loput reitistä menee siihen • Esimerkki blog reiteistä: Reitinmuoto Rajoitukset routes.MapRoute( "SingleEntryWithBlog", "{blogUrl}/{year}/{month}/{day}/{entryUrlID}", new { controller = "Entries”, action = "Display", day = -1, entryUrlID= (string)null }, new { year = @"\d{4}", month = @"\d{2}", day = @"\d{2}|-1", blogUrl= blogFilter });

  9. OmaRouteBase • PeriuusiluokkaRouteBaseperusluokasta • Override: • GetRouteData() - Analysoi URL japäättelereitinosat (RouteData). • GetVirtualPath() - Analysoireitinosatjamikäli on meidänreitinosat, luo URL • MVC pipelinenmuutosatmuuttamatta muista“controller” ja “action”! • Uudenreitinrekisteröinti (Global.asax.cs) • public static void RegisterRoutes(RouteCollectionroutes) { • ... routes.Add(”Nimi”, newOmaRouteBase()); ... }

  10. ControllerFactory Reitintiedot ControllerFactory action controller id Execute() Controller Controller Controller instance Controller

  11. ControllerFactory • MiksitarvitaanräätälöityControllerFactory? • Oletustoteutuksen tapa löytää Controller luokkaeisovi • Dynaamisestiladatutassemblyt • Erilainennimeämiskäytäntö • Halutaanvaikuttaa Controller luokanluomiseen • Parametritconstructorille (IOC) • IActionInvokerasetus

  12. OmaControllerFactory • ToteutetaanIControllerFactory • Parempi tapa periäluokkaDefaultControllerFactoryperusluokastajakuormittaatoiminnallisustarpeenmukaan • Rekisteröinti (global.asax.cs) ControllerBuilder.Current.SetControllerFactory( new OmaControllerFactory());

  13. ActionInvoker Reitintiedot action controller id Controller ActionInvoker Action method Action method Action method Action method

  14. ActionInvoker • MiksitarvitaanräätälöityActionInvoker? • Metodinpäättelyvaatiimuutakuinpelkänreitinosan • Metodinlöytäminenluokastavaatiiomaalogiikkaa

  15. OmaActionInvoker • ToteutetaanIActionInvoker • Helpompi tapa periäluokastaControllerActionInvokerjakuormittaatoiminnallisuudettarpeenmukaan • Jos halutaanvaanvaikuttaametodinnimeen, helpointa on kuormittaaIActionInvokerrajapinnanmetodi • ActionInvokerpitääasettaaControllerissa. • IControllerFactory:nkautta • Controller perusluokassa

  16. Meidän demo: CMS • YksinkertainensisällönhallintajärjestelmäMVC:npäälle • Demossakeskitytään wiki toiminnallisuuteen SQL database Controller Repository LINQ

  17. Path: /wiki/TechEd Controller nimi: Wiki Controller: WikiController, CMS.Wiki, version=1.0.0.0 Esimerkki(sisällötjatyypit) • wiki • TechDays • TechEd • PDC • articles • cooking • Domino icecream • Lasagne Path: /articles/cooking/Domino_icecream Controller nimi: Article Controller: ArticleController, CMS.Common, version=1.0.0.0

  18. Demo: CMS • Reitityksenräätälöinti • Reititperustuvatsisällönpuurakenteeseen • Näytettäväsisältötunnistetaanreitinperusteella • ControllerFactoryräätälöinti • Controller luokkaperustuusiihensisältötyyppiinmitänäytetään • ActionInvokerräätälöinti • Käyttäjästäriippuenmuiden action metodienlaukaiseminen • Show action yksinkertaistanäyttöävarten (HTTP GET) • Update action kun tarvitseetallentaatietoa (HTTP POST) • Delete action kun halutaanpoistaatietoa (HTTP DELETE) • Create action kun halutaanlisätäuuttatietoa (HTTP CREATE)

  19. DEMO: RouteHandler, ControllerFactory, ActionInvoker

  20. HtmlHelper • Tarjoaanäkymillepalveluja • VoidaantarjotaomiapalvelujatekemälläHtmlHelper:inpäällelaajennuksia • Käytetäänlaajenusmetodeja (extension methods - C# 3.0)

  21. Model binder A = 1 B = 2 class MyModel { int A; int B; MyC C; string[] J; } class MyC { int D; int E; int F; MyG G; } class MyG { int H; int I; } HTTP pyyntö A = 1 B = 2 C.D = 3 C.E = 4 C.F = 5 C.G.H = 6 C.G.I = 7 J[0] = ”omena” J[1] = ”päärynä” <<MyC C>> D = 3 E = 4 F = 5 Model Binders <<MyG G>> H = 6 I = 7 <<string[] J>> omena päärynä

  22. Model binder • Miksitarvitaanoma model binder? • Oman tietotyypinmuuttaminenpyynnöstä .NET tyypiksi • Esimerkiksisuojattu/koodattu ID

  23. Oma Model binder • Kaksitapaatehdä: • ToteutarajapintaIModelBinder • PeriuusiluokkaluokastaDefaltModelBinder • Kaksitapaakäyttää: • Rekisteröidän .NET tyypilleglobaalinen binder • Lisätään action metodinparametrineteenattribuutti: ModelBinders.Binders.Add(typeof(DataType),newMyDataTypeBinder()); public ActionResultMyAction ( [ModelBinder(typeof(MyDataTypeBinder))] DataTypedt ) { … }

  24. DEMO: ModelBinder, HtmlHelper

  25. Onko autentikoitu? Ei ole Filter Filters Controller On autentikoitu Ei ole Filter Action method Onko HTTPS? ASP.NET MVC Pipeline On HTTPS Action method

  26. Omatfilterit • FilterAttribute • Luouusiattribuutti(perimälläperusluokastaSystem.Web.Mvc.FilterAttribute) • Toteutajokuseuraavistarajapinnoista: • IAuthorizeFilter • IExceptionFilter • IResultFilter • IActionFilter • Periolemassaolevaattribuuttijaräätälöisentoimintoa • AuthorizeAttribute • …

  27. Controller perusluokka • Miksitarvitaanoma Controller perusluokka? • IActionInvokerasetus • Yleiskäyttöisettoiminnallisuudet (data access) classOmaController : System.Web.Mvc.Controller{ // parametriton constructor!! public OmaController () { ... } }

  28. ActionResult Controller JsonResult FileResult RedirectResult Action method RedirectToAction ViewResultBase (ViewResult) (PartialViewResult) ActionResult ... ExecuteResult() HTTP response

  29. OmaActionResult • MiksitarvitaanomaActionResult? • Halutaangeneroidavastaus • Esimerkiksi: RSS feedi classOmaActionResult : System.Web.Mvc.ActionResult{ public override voidExecuteResult ( ControllerContext context ) { ... } }

  30. DEMO: Filter, Controller perusluokka, ActionResult

  31. ViewEngine ViewEngine ViewEngine ControllerContext view View Reitinosat View View View id action controller View View

  32. OmaViewEngine • HarvointarvitseetäysinomaaViewEnginetehdä. Yleisestitarvitaanvaanolemassaolevienräätälöintiä. class OmaViewEngine : IViewEngine { ... } ViewEngines.Engines.Add ( new OmaViewEngine() );

  33. ViewEngineräätälöinti • KaksioletusViewEnginea: • System.Web.Mvc.WebFormViewEngine • System.Web.Mvc.RazorViewEngine • Yksiperusluokka: • System.Web.Mvc.VirtualPathProviderViewEngine • Näkymien sijainnin muuttaminen • VirtualPathProviderViewEngine sisältää polkupohjat taulukkoja

  34. ViewEngineräätälöinti

  35. ViewEngineräätälöinti

  36. ViewEngineräätälöinti • Virtuaaliset polut annetaan VirtualPathProviderinstanssille • VirtualPathProviderViewEnginejäsen VirtualPathProvider • TÄTÄ EI VOI KÄYTTÄÄ tiedostojen löytämiseen. Sen sijaan rekisteröidään globaali VirtualPathProvider HostingEnvironment.RegisterVirtualPathProvider ( new MyProvider () );

  37. VirtualPathProvider ASP.NET Web sovellus (WebForms, MVC) /app/Views/Test.aspx .NET Framework <<VirtualFile>> C:\Web\Sovellus\v1_0\ Views\Test.aspx VirtualPathProvider Tiedostojärjestelmä

  38. VirtualPathProvider ASP.NET Web sovellus (WebForms, MVC) /app/Views/Test.aspx .NET Framework <<VirtualFile>> 0x1234567890ABCDEF VirtualPathProvider Oma VirtualPathProvider Tiedostojärjestelmä Tietokanta

  39. VirtualPathProvider • MiksitarvitaanomaVirtualPathProvider: • Tiedostot (View) säilytetään tietokkannassa: • http://bit.ly/hsLqMe • Tiedostot (View) säilytetään ZIP tiedostossa: • http://bit.ly/fndBw8

  40. Yhteenveto • ASP.NET MVC tarjoaapaljonominaisuuksiajamahdollisuuksiamillävoiräätälöidäkehikon • Palikoitavoidaanvaihdellayksikerallaanlisäämälläuusiaominaisuuksiajarakentamallajuurisopivanjärjestelmän • MVC lähdekoodi: http://aspnet.codeplex.com/

  41. Q&A Kiitoksia!

  42. © 2009 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.

More Related