Asp net mvc framework
Sponsored Links
This presentation is the property of its rightful owner.
1 / 46

ASP.NET MVC Framework PowerPoint PPT Presentation


  • 90 Views
  • Uploaded on
  • Presentation posted in: General

ASP.NET MVC Framework. Simone Chiaretta Solution Developer, Avanade http://codeclimber.net.nz. 24 Ottobre 2008. Agenda. Storia degli strumenti Microsoft per lo sviluppo Web Introduzione ad ASP.NET MVC Pattern MVC ASP.NET MVC nel dettaglio Testing ASP.NET MVC Futuro di ASP.NET MVC.

Download Presentation

ASP.NET MVC Framework

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


ASP.NET MVC Framework

Simone ChiarettaSolution Developer, Avanade

http://codeclimber.net.nz

24 Ottobre 2008


Agenda

  • Storiadeglistrumenti Microsoft per lo sviluppo Web

  • Introduzione ad ASP.NET MVC

  • Pattern MVC

  • ASP.NET MVC neldettaglio

  • Testing ASP.NET MVC

  • Futurodi ASP.NET MVC


Storiadeglistrumenti Microsoft per lo sviluppo Web


Prima c’era ASP “Classic”


Prima c’era ASP “Classic” - Storia

ASP (‘96 – 2000, IIS3 –> )

  • Primo framework disviluppo web integratocolwebserver

  • Introduce le prime astrazioni per facilitarel’interazione con ilwebserver

    • Request

    • Response

    • Server


Prima c’era ASP “Classic” - Problemi

  • Lasciacompletalibertà al programmatore =

    • Codice e HTML sonomischiati (“spaghetti code”)

  • Difficileseparareimplementazione e presentazione

<% Set oConn = Server.CreateObject("ADODB.Connection")

oConn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("DB.mdb")

Set rsUsers = Server.CreateObject("ADODB.Recordset")

rsUsers.Open "SELECT * FROM Users", oConn %>

<TABLE align="center" border="0" cellpadding="0" cellspacing="0" width="100%">

<% do while not rsUsers.eof %>

<tr>

<td><%=rsUsers.fields(0)%></td>

<td><%=rsUsers.fields(2)%></td>

</tr>

<% rs.movenext

loop %>

</table>

<% rsUsers = Nothing

oConn = Nothing %>


Poi venne ASP.NET - Storia

  • Cercadirisolvereilproblemadello“spaghetti code”

  • Rilasciato Gen ‘02 con .NET 1.0

  • Permettediadottare un approccioVB6-like per lo sviluppo web.

  • Nasceilconcettodi

    WebForm


Poi venne ASP.NET - WebForm


Poi venne ASP.NET - WebForm

  • Ciclodi vita dellapaginabasatosueventi

  • Programmazionebasatasueventi

  • UserControls e Control tree

  • Nasconde la natura state-less del web


Poi venne ASP.NET - Caratteristiche

  • HTML e codicesono in due file distinti(code-behind):

    • .aspx: contiene HTML e webcontrols

    • .aspx.cs: contieneilcodice per manipolareiwebcontrols

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server“

<title>Sample page</title> </head> <body>

<formid="form1" runat="server"> <div>

<asp:Labelrunat="server" id="Label1" /> </div>

</form>

</body>

</html>

using System;

namespace Website

{

public partial class Page1 : System.Web.UI.Page

{

protected Label Label1;

protected void Page_Load

(object sender, EventArgs e)

{

Label1.Text = "Hello ASP.NET";

}

}

}


Poi venne ASP.NET - Problemi

Page Lifecycle

troppocomplesso


Poi venne ASP.NET - Problemi

Troppo

codice HTML

autogenerato


Poi venne ASP.NET - Problemi

Troppa “roba” daportare in giro:

ViewState


Poi venne ASP.NET - Problemi

Inutilmentecomplesso


Poi venne ASP.NET – SoluzioneaiProblemi

  • Codicetroppoaccoppiato: pattern MVP, WCSF, MonoRail

  • HTML “brutto”: CSS Adapter Toolkit, templated controls

  • ViewState“ingombrante”: abilitarloselettivamente

Ma tuttociò non è “out-of-the-box”


Introduzione a ASP.NET MVC


ASP.NET MVC to the rescue

Ritornoallasemplicità


ASP.NET MVC to the rescue – Storia

  • Nasce per cercaredirisolvereiproblemidi ASP.NET

  • Annunciatoda Scott Guthrie alla prima ALT.NET conference di Austin a Ott ‘07

  • Attualmente alla versione Beta (1?)(Ottobre ‘08)

  • “Obbliga” unamaggiorseparazionedelleresponsabilità


ASP.NET MVC – Caratteristiche

  • Implementail pattern Model-View-Controller

  • Sviluppato per esseretestabile

  • Estendibile

  • URL mapping engine

  • Puòutilizzareilmodellowebform per quelcheriguardailrendering, ma non per ilpostback

  • Supportatutte le funzionalità pre-esistenti: autenticazione, autorizzazione, caching, session, providers, ecc…


Il Pattern MVC


MVC in Real Life

  • Consegnadella pizza

  • L’utenteparla al controller (prendel’ordine per la pizza)


MVC in Real Life

  • Il controller delega al model (ilcuocoricevel’ordine)


MVC in Real Life

  • Quando la pizza è pronta, viene data al controller chedelegaalla view(fattorinoporta la pizza a casa)


Introduzione a MVC

  • Introdotto per la prima volta in Smalltalk nel ‘79

  • “Di moda” negliultimianni grazie a Struts, Spring MVC e Ruby on Rails

  • Divide l’applicazione in 3 componenti:

    • Model: la business logic dell’applicazione, checontiene le informazioni sui dati

    • View: rappresentaidatinella UI visibiledall’utente

    • Controller: orchestra le operazioni, ricevel’input, decide come recuperareidati e lipassaalla view


Il flussodiun’applicazione MVC

Il Controller chiedeidati al Model

La richiestaarriva al controller

Model

2

1

3

Browser

Controller

Il Model restituisceidati al controller

Il controller formattaidati e lipassaalla view

4

View

5

La view costriusce la paginachevieneinivata al browser


ASP.NET MVC neldettaglio

[with Demo]


Flussodellarichiesta


Routing

  • Parte di ASP.NET 3.5 SP1

    • System.Web.Routing.dll

  • Url con parametri:

    • {controller}, {action}, {parametri}

routes.MapRoute(

"Blog",//nome

"blog/{date}/{title}", //url

/*valori di default per i parametri*/

new {

controller = "Blog",//Controller

action = "Show",//Action

date = DateTime.Now,//Parametri

title = ""

}

);


Controller

  • Classe con nome<NomeController>Controller

  • EreditadaController

  • Un metodopubblico per Action

  • MetodorestituisceActionResult

public classBlogController: Controller

{

public ActionResult Show(DateTime date, string title)

{

ViewData["Titolo"] = title;

ViewData["Data"] = date;

returnView();

//returnView(“<viewName>", <viewdata>);

}

}


View – Loosely Typed

  • E’ un normaleWebFormcheereditadaViewPage

  • DEVE SOLOcostruire la UI HTML

  • ViewData è +/- unaHashTable

public partial class Show : ViewPage

{

//quasi sempre vuoto

}

<h2><%= Html.Encode(ViewData["Message"]) %></h2>

<%= ((DateTime)ViewData["Data"]).ToLongDateString()%>


View – Strongly Typed

  • La view puòancheessere strongly typed

    • Complie time check

    • Intellisense friendly 

  • ViewData è unaclasse custom

  • public partial class StrongShow : ViewPage<PresentationModelClass>

    {

    //quasi sempre vuoto

    }

    <h2><%= Html.Encode(ViewData.Model.Message) %></h2>

    <%= ViewData.Model.Data.ToLongDateString()%>


    View – UI Helpers

    • UI Helper per aiutare la scritturadicodice HTML

      • Html.ActionLink

      • Html.ActionLink<ControllerClass>

      • Html.BeginForm

      • Html.BeginForm<ControllerClass>

    Html.ActionLink(“TestoLink",“ActionName",“Controller", new { parametri });

    Html.ActionLink<ControllerClass>( c => c.ActionName(parametri),"Testo Link");


    Estendere MVC

    • Tuttopuòessereesteso

      • IControllerFactory

        • StructureMapControllerFactory

        • UnityControllerFactory

        • SpringControllerFactory

      • IViewFactory

        • BooViewEngine

        • NHamlViewFactory

    • Quasi tutte le integazionisonosviluppateall’internodiMVCContrib: http://www.codeplex.com/MVCContrib


    Testare ASP.NET MVC

    [with Demo]


    Testare ASP.NET MVC

    Ma questa non avrebbedovutoessere la prima slide?


    Testarei controller

    • No mocking involved

    [TestClass]

    public classBlogControllerTest

    {

    [TestMethod]

    public void Show()

    {

    BlogController controller = newBlogController();

    var result = controller.Show(2010,10,11,"Titolo Post")

    as RenderViewResult;

    Assert.IsNotNull(result, "Aspettavo un view da renderizzare");

    Assert.AreEqual("Titolo Post", result.ViewData["Titolo"],

    "Mi aspettavo un altro messaggio");

    }

    }


    Altriesempidi test

    • Testarestrongly-typed view data

      • Assert.AreEqual(expected, ((BlogModel)result.ViewData.Model).Titolo,…);

    • Testare Redirect

      • var result = controller.Show(…) as RedirectToRouteResult;


    Wrapping up…


    ASP.NET MVC vsWebForms

    • WebForms

      • Sviluppo RAD

      • Paradigmapiù simile allosviluppotradizionale client-side

      • Ottimo per “prototipare”

      • Puòdiventareinmantenibile

    • ASP.NET MVC

      • Piùcodicedascrivere

      • “Miglior” architetturadell’applicazione

      • Maggiorcontrollosu HTML

      • Abilitausodimetodologie Agile


    Statodi ASP.NET MVC

    • Orasiamoalla Beta

    • RTW rilasciata in un mesechefinisce in “ember” (Januray-ember?)

    • Routing ormai “stabile” (parte di ASP.NET 3.5 SP1)


    Conclusioni

    • ASP.NET MVC è un framework checipermettediscriverebuon software by default

    • ASP.NET WebFormnecessitadi “lavoro” per raggiungere lo stessolivellodipulizia

    • ASP.NET MVC non è ASP.NET 4.0

      • è un’alternativa, non un sostituto


    Risorse

    • http://asp.net/mvc/ - Sitoufficiale, con download Beta, sample, video, ecc.

    • http://www.codeplex.com/aspnet - Codicesorgente

    • http://del.icio.us/tag/aspnetmvc - tuttigliarticolisu ASP.NET MVC

    • http://polymorphicpodcast.com/shows/mvcresources/ - lista “commentata” dirisorse

    • Blog di MS

      • ScottGu: http://weblogs.asp.net/scottgu/default.aspx

      • ScottHa: http://www.hanselman.com/blog/

      • PhilHa: http://haacked.com/


    Beginning ASP.NET MVC

    • Simone Chiaretta e Keyvan Nayyeri

    • Rilascio: Marzo 2009

    • Già in prevendita su Amazon

    • TOC:

      • MVC

      • Testing

      • And more...

    • http://www.amazon.co.uk/Beginning-ASP-NET-MVC-Simone-Chiaretta/dp/047043399X/


    Fun stuff

    • The MVC Song:

      • http://www.railsenvy.com/assets/2008/6/3/mvc_song.mp3

    • MVC Public Service Announcement Videos

      • http://www.railsenvy.com/2008/6/3/mvc-videos

      • http://www.vimeo.com/album/15216


    Contatti – Simone Chiaretta

    • MSN: [email protected]

    • Blog:

      • English: http://codeclimber.net.nz/

      • Italiano: http://blogs.ugidotnet.org/piyo/

    • Twitter: http://twitter.com/simonech


    Q&A


  • Login