ASP.NET MVC: non solo «tennologgia»<br />Andrea Saltarello<br />(Solution) Architect @ ManagedDesigns S.r.l. – http://www....
Innanzitutto…<br />Grazie,                                     ! <br />
Agenda<br />#ifdef NIUBBO MVC 1-2-3<br />Controller->View<br />View->Controller<br />AspNetMvc.More();<br />
ModelView Controller<br />Formulato nel 1979 da TrygveReenskaug, membro del team Smalltalk @ Xerox PARC<br />La prima moti...
Model view controller<br />Model<br />StateQuery<br />StateChange<br />Change Notification<br />View<br />Controller<br />...
MVC: falsi miti<br />Lo scopo del Controller non è di separare la ViewdalModel. <br />La responsabilità del Controller è d...
Model 2<br />In a Model 2 application, requests from the client browser are passed to the controller, which is a servlet. ...
JSP->Controller->Page Controller [P of EAA, 333]</li></li></ul><li>Introduzione a ASP.NET MVC (1/4)<br />http://host/webap...
Introduzione a ASP.NET MVC (2/4)<br />http://host/webapp/Customer/Detail/1<br />
Introduzione a ASP.NET MVC (3/4)<br />http://host/webapp/Customer/Detail/1<br />
Introduzione a ASP.NET MVC (4/4)<br />http://host/webapp/Customer/Detail/1<br />
Navigation Flow<br />Le action restituiscono un valore di tipo ActionResult. “Pragmapolimorficamente” parlando:<br /><ul><...
RedirectResult. RestituitodalmetodoRedirect.
ContentResult. RestituitodalmetodoContent.
JsonResult. RestituitodalmetodoJson.
EmptyResult. Restituitodalle action chevoglianorestituire “null”.
YourOwnPersonalResult(semi-cit), restituito da una factory ad hoc</li></li></ul><li>ASP.Net MVC<br />
Dati: Controller->View<br />Per trasferire dati dal controller alla view:<br />ViewData<br />YourView.Model=Presentation V...
ASP.Net MVC<br />
Dati: View->Controller<br />Per trasferire dati dalla view al controller:<br />Parametridella action (convention over conf...
ASP.Net MVC<br />
Data Entry<br />Built in:<br />Usare i metodi helper per definire i “campi”<br />Taggareil ViewModel mediante DataAnnotati...
ASP.Net MVC<br />
Data Entry <3 JQuery<br />Client side validation<br />Inclusione degli script JS<br /><% Html.EnableClientSideValidation()...
ASP.Net MVC<br />
AspNetMvc.More();<br />Esempi:<br />[FX4 only]<%: … %> (equivalente a <% =Html.Encode(…) %>)<br />IoC<br />Custom ActionRe...
ASP.Net MVC<br />
MVC @ ManagedDesigns<br />In azienda usiamo il toolkit MVC dalle prime CTP della v1, ed abbiamo raggiunto una struttura «s...
MVC goes Model 3<br />Model 2 separa il Controller in:<br />Front Controller<br />Page Controller<br />Model 3 separa il M...
Upcoming SlideShare
Loading in …5
×

MVC2: non solo tecnologia

1,664 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,664
On SlideShare
0
From Embeds
0
Number of Embeds
395
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

MVC2: non solo tecnologia

  1. 1. ASP.NET MVC: non solo «tennologgia»<br />Andrea Saltarello<br />(Solution) Architect @ ManagedDesigns S.r.l. – http://www.manageddesigns.it<br />andysal@gmail.com<br />http://blogs.ugidotnet.org/pape<br />http://twitter.com/andysal74<br />http://creativecommons.org/licenses/by-nc-nd/2.5/<br />
  2. 2. Innanzitutto…<br />Grazie, ! <br />
  3. 3. Agenda<br />#ifdef NIUBBO MVC 1-2-3<br />Controller->View<br />View->Controller<br />AspNetMvc.More();<br />
  4. 4. ModelView Controller<br />Formulato nel 1979 da TrygveReenskaug, membro del team Smalltalk @ Xerox PARC<br />La prima motivazione di design è:<br />Separare gli aspetti di presentazione da <br />quelli di dominio.<br />E' la “radice concettuale” di tutti gli attuali pattern:<br />Model ViewPresenter, Presenter-First, Passive View, Presentation Abstraction Control, Presentation ModelModelViewViewModel...<br />
  5. 5. Model view controller<br />Model<br />StateQuery<br />StateChange<br />Change Notification<br />View<br />Controller<br />View Selection<br />User Gestures<br />Method Invocations<br />Events<br />
  6. 6. MVC: falsi miti<br />Lo scopo del Controller non è di separare la ViewdalModel. <br />La responsabilità del Controller è di fare damediatoretral'utente e l'applicazione, non tra la View e ilModel.<br />Spessosiparla di MVC, ma siintendeModel 2<br />
  7. 7. Model 2<br />In a Model 2 application, requests from the client browser are passed to the controller, which is a servlet. The controller decides which view (JSP) it will pass the request to. The view then invokes methods in a JavaBean (which may access a database) and returns the Response object to the Web container, which is then passed on to the client browser. [Wikipedia]<br />Legenda:<br /><ul><li>Servlet->HttpHandler->Front Controller [P of EAA, 344]
  8. 8. JSP->Controller->Page Controller [P of EAA, 333]</li></li></ul><li>Introduzione a ASP.NET MVC (1/4)<br />http://host/webapp/Customer/Detail/1<br />
  9. 9. Introduzione a ASP.NET MVC (2/4)<br />http://host/webapp/Customer/Detail/1<br />
  10. 10. Introduzione a ASP.NET MVC (3/4)<br />http://host/webapp/Customer/Detail/1<br />
  11. 11. Introduzione a ASP.NET MVC (4/4)<br />http://host/webapp/Customer/Detail/1<br />
  12. 12. Navigation Flow<br />Le action restituiscono un valore di tipo ActionResult. “Pragmapolimorficamente” parlando:<br /><ul><li>ViewResult. Restituito dal metodoView.</li></ul>PartialViewResult. Restituito dal metodoPartialView.<br /><ul><li>RedirectToRouteResult. RestituitodaimetodiRedirectToAction e RedirectToRoute.
  13. 13. RedirectResult. RestituitodalmetodoRedirect.
  14. 14. ContentResult. RestituitodalmetodoContent.
  15. 15. JsonResult. RestituitodalmetodoJson.
  16. 16. EmptyResult. Restituitodalle action chevoglianorestituire “null”.
  17. 17. YourOwnPersonalResult(semi-cit), restituito da una factory ad hoc</li></li></ul><li>ASP.Net MVC<br />
  18. 18. Dati: Controller->View<br />Per trasferire dati dal controller alla view:<br />ViewData<br />YourView.Model=Presentation View Model<br />
  19. 19. ASP.Net MVC<br />
  20. 20. Dati: View->Controller<br />Per trasferire dati dalla view al controller:<br />Parametridella action (convention over configuration): <br />ognielemento in query string èmappatosu un parametroomonimo<br />ognielemento del <form /> èmappatosu un parametroomonimo<br />FormCollection<br />>>>Model binding<<<<br />
  21. 21. ASP.Net MVC<br />
  22. 22. Data Entry<br />Built in:<br />Usare i metodi helper per definire i “campi”<br />Taggareil ViewModel mediante DataAnnotations<br />Ricordarsi Html.ValidationMessageFor<>() e/o Html.ValidationSummary()<br />[Opzionale]Impostare .input-validation-error nel css<br />[Opzionale]: EditorTemplates, DisplayTemplates<br />
  23. 23. ASP.Net MVC<br />
  24. 24. Data Entry <3 JQuery<br />Client side validation<br />Inclusione degli script JS<br /><% Html.EnableClientSideValidation(); %><br />JQuery plug-in, es:<br />JQuery UI (tab, datepicker, …)<br />JQGrid<br />Assert.IsTrueLove(EditorTemplates, JQuery)<br />
  25. 25. ASP.Net MVC<br />
  26. 26. AspNetMvc.More();<br />Esempi:<br />[FX4 only]<%: … %> (equivalente a <% =Html.Encode(…) %>)<br />IoC<br />Custom ActionResult:<br />Generare Thumbnail<br />Generare Atom/RSS (http://www.ugidotnet.org/Article/Detail/280)<br />“Componentization”: RenderPartial+RenderAction<br />Test<br />Aree<br />
  27. 27. ASP.Net MVC<br />
  28. 28. MVC @ ManagedDesigns<br />In azienda usiamo il toolkit MVC dalle prime CTP della v1, ed abbiamo raggiunto una struttura «standardizzata» dei progetti:<br />Model 3<br />LayeredExpressionTrees<br />
  29. 29. MVC goes Model 3<br />Model 2 separa il Controller in:<br />Front Controller<br />Page Controller<br />Model 3 separa il Model in:<br />View Model: rappresenta i dati che la view si impegna a presentare all’utente<br />Worker Service: è la façade che il page controller utilizza per produrre il View Model<br />E’ il Single ResponsibilityPrinciple, baby! <br />
  30. 30. Nevermind the bollocks, here’s the Model 3<br />
  31. 31. LayeredExpressionTrees (LET idiom)<br />Facciamo un gioco: invece di definire un «botto» di DTO, facciamo che layer e servizi si scambino degli IQueryable<YourFavouriteDomainEntity>, facendo «emergere» la query e specificando la proiezione solo all’ultimo momento?<br />L’espressione «Capra e cavoli» vi dice niente? <br />
  32. 32. C’mon Query LET’s go party (ah-ah-ah, yeah!)<br />
  33. 33. Slide e demo<br />Slide sul mio blog: http://blogs.ugidotnet.org/pape<br />Demo su CodePlex: http://nsk.codeplex.com<br />

×