[Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo Finochietti + Leandro...

28
Construcción de sitios escalables con ASP.NET MVC Mariano Sánchez Leandro Boffi Rodolfo Finochietti (MVP)

description

[Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo Finochietti + Leandro Díaz Guerra + Mariano Sánchez)

Transcript of [Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo Finochietti + Leandro...

Page 1: [Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo Finochietti + Leandro Díaz Guerra + Mariano Sánchez)

Construcción de sitios escalables con

ASP.NET MVC

Mariano SánchezLeandro BoffiRodolfo Finochietti (MVP)

Page 2: [Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo Finochietti + Leandro Díaz Guerra + Mariano Sánchez)

Modelo-Vista-Controlador

Model

ControllerView

Xerox PARC 1978http://heim.ifi.uio.no/~trygver/themes/mvc/mvc-index.html

Page 3: [Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo Finochietti + Leandro Díaz Guerra + Mariano Sánchez)

ASP.NET MVCUn nuevo framework para Web

DevelopmentUn nuevo tipo de proyecto en Visual

StudioMás control sobre el HTMLMás testeableNo es una nueva versión de ASP.NET

Web FormsEsta basado en ASP.NET

Page 4: [Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo Finochietti + Leandro Díaz Guerra + Mariano Sánchez)

¿Que ofrece?SoC (Separation of Concerns)

TDD por defaultMantenibilidad

Url y HTML mas limpioSEO y REST friendly

/Usuarios/Buscar/MatíasCSS Friendly

<html> <div> <label> <span>

Modelo de programación mas performanteNo hay ViewStateNo hay modelo de eventos

Page 5: [Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo Finochietti + Leandro Díaz Guerra + Mariano Sánchez)

Demo Hola Mundo

Page 6: [Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo Finochietti + Leandro Díaz Guerra + Mariano Sánchez)

¿Como trabaja?Navego a http://.../Productos/Listar Se determina

la ruta

El controller Productos es

creado

Un método Listar del

controller es invocado

Se ejecuta la logica del controller

Se dibuja la vista pasándole

la ViewData

Se dibujan Urls que apuntan a otras acciones

de otros controllers

Page 7: [Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo Finochietti + Leandro Díaz Guerra + Mariano Sánchez)

Rutas

www.sitio.com/products/report/33/2008/11

Page 8: [Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo Finochietti + Leandro Díaz Guerra + Mariano Sánchez)

URIs amigablesLegibles

www.sitio.com/products.aspx?module=reports&productId=33&year=2008&m=11

www.sitio.com/products/report/33/2008/11

Predecibleshttp://es.wikipedia.org/wiki/Microsoft

Page 9: [Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo Finochietti + Leandro Díaz Guerra + Mariano Sánchez)

Ruteo – URIs amigablesSe agregan rutas a la RouteTable globalEl Mapeo crea un objeto RouteData (un diccionario de

key/values)protected void Application_Start(object sender, EventArgs e) { RouteTable.Routes.Add(

"Blog/bydate/[year]/[month]/[day]",new { controller="blog", action="showposts" },new { year=@"\d{1,4}", month= @"\d{1,2}",

day = @"\d{1,2}"});}

Page 10: [Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo Finochietti + Leandro Díaz Guerra + Mariano Sánchez)

Controlador – Uso Básico

Escenarios, Objetivos y DiseñoLas URLs indican “acciones” del Controlador, no páginas Las acciones deben declarase en el Controlador.El Controlador ejecuta lógica y elige la vista.

public ActionResult ShowPost(int id) { Post p = PostRepository.GetPostById(id); if (p != null) { View(p); } else { View("nosuchpost", id); }}

Page 11: [Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo Finochietti + Leandro Díaz Guerra + Mariano Sánchez)

Vistas – Uso BásicoEscenarios, Objetivos y Diseño:

Generan HTML u otro tipo de contenido. Helpers pre-definidos.

Pueden ser .ASPX, .ASCX, .MASTER, etc.Pueden reemplazarse con otras

tecnologías:Template engines (NVelocity, Spark, …).Formatos de salida (images, RSS, JSON, …).Pueden definirse vistas Mock para testing.

El controlador ofrece datos a la VistaDatos Loosely Typed o Strongly Typed .

Page 12: [Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo Finochietti + Leandro Díaz Guerra + Mariano Sánchez)

Demo ASP.NET MVC

Page 13: [Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo Finochietti + Leandro Díaz Guerra + Mariano Sánchez)

¿Qué hay del lado del cliente?

Page 14: [Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo Finochietti + Leandro Díaz Guerra + Mariano Sánchez)

jQueryOpen Source

MIT y GPLCross Browser

Internet Explorer 6+, Firefox 2+, Opera 9+, and Safari 2+

Liviano 15k

Adoptado por MicrosoftIntegrado con Visual StudioSoporte 7/24

Page 15: [Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo Finochietti + Leandro Díaz Guerra + Mariano Sánchez)

jQuery

Selectors

Animations

Plugins

Page 16: [Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo Finochietti + Leandro Díaz Guerra + Mariano Sánchez)

jQuery Selectors

$(“#userName”)

$(“input:text”)

$(“.required”)

$(“#grid tr:even”)

Page 17: [Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo Finochietti + Leandro Díaz Guerra + Mariano Sánchez)

jQuery Animations

$(…).show() $(…).hide()

$(…).slideDown() $(…).slideUp()

$(…).fadeIn() $(…).fadeOut()

Page 18: [Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo Finochietti + Leandro Díaz Guerra + Mariano Sánchez)

jQuery Pluginshttp://plugins.jquery.com/

•Ajax (182)

•Animation and Effects (253)

•Browser Tweaks (67)

•Data (122)

•DOM (123)

•Drag-and-Drop (30)

•Events (119)

•Forms (317)

•Integration (88)

•JavaScript (130)

•jQuery Extensions (198)

•Layout (162)

•Media (108)

•Menus (80)

•Metaplugin (24)

•Navigation (131)

•Tables (64)

•User Interface (571)

•Utilities (291)

•Widgets (211)

•Windows and Overlays (89)

Page 19: [Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo Finochietti + Leandro Díaz Guerra + Mariano Sánchez)

¿Qué hay de AJAX?

Page 20: [Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo Finochietti + Leandro Díaz Guerra + Mariano Sánchez)

AJAX en ASP.NET MVCAJAX MVC

AJAX Helpers, Vistas ParcialesASP.NET AJAX Framework (Client Side)

Vistas del tipo JSONXMLHttpRequestjQuery

Page 21: [Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo Finochietti + Leandro Díaz Guerra + Mariano Sánchez)

Demo ASP.NET MVC + jQuery + AJAX

Page 22: [Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo Finochietti + Leandro Díaz Guerra + Mariano Sánchez)

ExtensibilidadTan simple o complejo como se quiera

Facil de extenderSe puede usar con IOC, o no

Se lleva bien con otrosNHibernate para el Modelo, Spark Engine para las VistasO cualquier otra cosa!

Page 23: [Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo Finochietti + Leandro Díaz Guerra + Mariano Sánchez)

Demo Extensibilidad

Page 24: [Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo Finochietti + Leandro Díaz Guerra + Mariano Sánchez)

ConclusionesFunciona muy bien!Esto no es Web Forms 4.0

Se trata de tener alternativas. Auto vs. Moto.

Máximo control sobre URLs y HTMLURLs amigables: SEO y REST

Gran integración con ASP.NET

Page 25: [Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo Finochietti + Leandro Díaz Guerra + Mariano Sánchez)

¿Preguntas?

Page 26: [Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo Finochietti + Leandro Díaz Guerra + Mariano Sánchez)

RecursosASP.NET MVC: http://www.asp.net/mvc/ASP.NET MVC Nerd Dinner Sample:

http://tinyurl.com/aspnetmvcScott Guthrie:

http://weblogs.asp.net/scottgu/

Page 27: [Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo Finochietti + Leandro Díaz Guerra + Mariano Sánchez)

[email protected] http://twitter.com/rodolfofhttp://weblogs.shockbyte.com.ar/rodolfof

[email protected]¡NO TIENE TWITTER!http://weblogs.asp.net/marianos

[email protected] http://twitter.com/leandroboffi http://agileculture.net/lboffi/

¡GRACIAS!

Page 28: [Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo Finochietti + Leandro Díaz Guerra + Mariano Sánchez)