martes, 23 de septiembre de 2014

ASP.NET Web Forms o MVC ¿ Cual encaja en nuestra necesidad ?

Este pequeño y humilde artículo tiene el propósito darles a conocer un poco más las tecnologías de desarrollo web que proporciona Microsoft. Si no lo hiciste todavía, te recomiendo que leas Entendiendo el ecosistema de desarrollo web de Microsoft.
Hoy voy a escribir sobre la diferencia entre ASP.NET Web Forms y ASP.NET MVC, que a muchos nos debe pasar, y no sabemos que herramienta elegir para nuestro proyecto, obviamente existen muchos criterios, reglas, escenarios, etc en el cual debemos elegir el mas indicado, con un objetivo que desarrollemos y entreguemos un producto de calidad, un producto que sea compatible, escalable, es lo que debemos entregarle a nuestro cliente y/o usuarios.

Bueno espesemos a explicar un poco,  MVC de ASP.NET no viene a sustituir las aplicaciones de WebForm sino completarlas para aportar una serie de ventajas, por ejemplo:
  • Separar aun más la representación de la lógica de negocio
  • Facilitar las técnicas de desarrollo test driven development
  • Facilitar las técnicas de Inversion of Control (IoC)
  • Mayor grado de parametrizacion/instrumentación de la solución
  • Permite evitar el modelo Postaback del ASP.NET
Como resultado general las mejoras descritas aportan:
  • mayor productividad,
  • agilidad en la respuesta al cambio de requerimientos,
  • fiabilidad y solidez en las aplicaciones.

Trasfondo

Hace mucho tiempo, con la ayuda de tecnologías como Visual Basic y Visual C++, Microsoft habilitó la creación de interfaces gráficas de forma rápida, con lo cual, los programadores podían enfocarse más en el negocio que en el diseño de las interfaces de usuario.
Esas tecnologías eran limitadas a las aplicaciones de escritorio, en el aspecto web, Microsoft sólo ofrecía ASP.
Cuando hablamos de web y escritorio, hay que considerar dos cosas:
  1. Cómo se administra el estado?
  2. Cómo funciona el pedido/respuesta?
Las aplicaciones web funcionan sobre el protocolo HTTP, el cual es un protocolo sin estado. A diferencia del escritorio, no hay variables que se preserven y no hay una programación completa manejada por eventos. Como en el escritorio, la web espera la entrada de un usuario, pero cada interacción actúa como un pedido nuevo al servidor.
En base a este escenario, Microsoft presentó ASP.NET Web Forms, manteniendo el desarrollo de aplicaciones rápido y la facilidad de aprendizaje.

¿Qué es ASP.NET?

ASP.NET es un framework de aplicaciones web creado por Microsoft, construido sobre el CLR (Common Language Runtime). Permite crear aplicaciones web dinámicas utilizando lenguajes como C# o Visual Basic.NET.

¿Qué son los Web Forms?

Los Web Forms aparecieron para solucionar los problemas que tenía la tecnología ASP clásica. Se creó un nuevo nivel de abstracción sobre la web sin estado, simulando el modelo con estado de los Windows Forms. Se introdujeron conceptos como postback (un envío desde la misma página) y ViewState (un objeto que almacena los valores de los controles durante los postbacks) y se redujo la cantidad de código a escribir.

Ventajas

  • Los Web Forms contienen controles de servidor ricos: ASP.NET detecta el navegador del usuario y genera HTML y JavaScript apropiado para él. Además, controles como el GridView o el ListView, contienen funcionalidad para enlazar datos.
  • ViewState: Normalmente los controles no retienen los valores entre los pedidos al servidor, pero en los Web Forms esto se logra guardando el último estado conocido en un campo oculto denominado ViewState.
  • Programación manejada por eventos: Microsoft introdujo la programación manejada por eventos, con la cual, los desarrolladores no tenían que apoyarse sobre los métodos POST y GET para las interacciones con el servidor. Haciendo doble click sobre un control, se genera un bloque de código que manejará el evento de dicho control en el servidor; sin que el desarrollador tenga que saber qué es lo que ocurre.
  • Desarrollo de aplicaciones rápido: Con los controles de servidor + el modelo manejado por eventos + ViewState, el desarrollador queda abstraído de muchas de las complejidades, con lo cual programa más rápido.
  • Curva de aprendizaje pequeña: Es posible hacer aplicaciones con muy poco conocimiento de HTML y JavaScript.

Desventajas

  • Unit Testing: El Code Behind (archivo que contiene código a ejecutarse en el servidor) termina conteniendo muchos manejadores de eventos, lo cual hace que el unit testing automático sea una tarea imposible.
  • Performance: ViewState se convirtió en una solución para varios problemas de ASP, pero como se guarda en la misma página hace que el tamaño de la misma se incremente y se reduzca la performance general.
  • Reutilización: El código incluido en el Code Behind de un Web Form no es fácilmente reutilizable en otro.
  • Poco control sobre el HTML: Muchas veces no está muy claro cuál es el HTML que resultará de la utilización de los controles, lo cual hace complicada la integración con frameworks como jQuery.
  • SEO: No se generan URLs amigables, lo cual afecta el SEO de la página.
  • Trabajo en paralelo: Como cada Web Form está atado a su Code Behind, no es recomendable que dos desarrolladores trabajen al mismo tiempo en estos archivos.

ASP.NET 4.0

ASP.NET 4.0 introdujo varias mejoras que solucionaron varios de estos problemas.
  • ViewState: Se provee la forma de desactivar o controlar el tamaño del ViewState.
  • URL Routing: Utilizando URL Routing se pueden crear URL amigables
  • ID: Hay mejor control sobre el ID de los elementos, para mejorar la integración con frameworks de JavaScript.

¿Qué es MVC?

MVC es un patrón de arquitectura de software, no es un concepto nuevo, ni está creado por Microsoft. Por las dudas, me gustaría explicar estas palabras que acabo de utilizar:
  • Patrón: Un patrón es una solución a un problema en un contexto.
  • Patrón de arquitectura: Son patrones de diseño de software que ofrecen soluciones a problemas de arquitectura de software, tienen un nivel mayor de abstracción que los patrones de diseño. Describen los elementos y el tipo de relación que tienen junto con un conjunto de restricciones sobre cómo pueden ser usados. Expresan un esquema de organización que consta de subsistemas, sus responsabilidades e interrelaciones.
La intención detrás de MVC es la de separación de responsabilidades. Las partes que componen el modelo MVC son:
  • Modelo: Maneja los datos y es independiente de las otras partes del MVC.
  • Vista: Es la representación del modelo de datos. Puede ser una página, un archivo Excel, un pdf, etc. La vista sólo conoce al modelo.
  • Controlador: Maneja la interacción del usuario y la lógica de entrada. Es el encargado de obtener el modelo y entregárselo a la vista.
ASP.NET WebForms vs ASP.NET MVC

¿Qué es ASP.NET MVC?

ASP.NET MVC es un nuevo framework para aplicaciones web creado por Microsoft, diseñado bajo la idea de la separación de responsabilidades y la posibilidad de implementar el testing. No posee ni ViewState, ni controles de servidor.

Ventajas

  • Arquitectura de proyecto: Al estar fuertemente implementada la separación de responsabilidades, también tenemos una arquitectura del proyecto ordenada.
  • Desarrollo manejado por tests: Los controles son clases separadas, por lo cual, es posible hacer test automáticos.
  • Reutilización: Los controles no están atados a una vista, por lo cual pueden ser reutilizados.
  • Performance: Las páginas son mucho más livianas comparadas con los Web Forms.
  • Control total del HTML: Como no existen los controles de servidor, la única opción es utilizar los controles HTML, por lo que sabemos cómo se terminará renderizando la página. La integración con librerías JavaScript es realmente simple.
  • Soporte para trabajo en paralelo: Al estar todo realmente separado, es posible que un desarrollador esté trabajando en una vista, mientras otro esté en el controlador y un tercero esté en el modelo, sin que interfieran entre ellos.
  • SEO, URL Routing y REST: Las características de routing permiten utilizar interfaces REST.
  • Extensión: Soporte para múltiples motores de vistas como aspx, razor, etc.
  • Características preexistentes de ASP.NET: Como está construido sobre el framework ASP.NET, provee características como autenticación, caching, session, etc.

Desventajas

La principal desventaja de ASP.NET MVC es que presenta una curva de aprendizaje mucho más importante, por lo cual, puede ser muy difícil para los desarrolladores que recién están empezando.

¿Cuál es mejor?

Ambas tecnologías pueden ser la mejor, todo depende de los requerimientos, el problema dado y el conocimiento que tenga el equipo de desarrollo. Lo que es importante saber, es que una tecnología no suplanta a la otra.
Existen unos factores que pueden hacernos decidir por una o por otra:
  • Quiero desarrollar la aplicación de forma rápida: ASP.NET Web Forms
  • Quiero poder hacer Unit Testing: ASP.NET MVC
  • Mi equipo tiene conocimiento de Windows Forms: Van a aprender mucho más rápido a utilizar Web Forms que MVC.
  • Mi equipo no tiene conocimientos de las tecnologías Microsoft: Si ya utilizaban JSP, Ruby On Rails, etc. MVC es la elección.
  • El uso de JavaScript va a ser importante: Si se va a utilizar mucho JavaScript, MVC es más adecuado.
  • No tengo mucho conocimiento de tecnologías web: ASP.NET Web Forms

Resumen

Hoy profundizamos un poco más en las tecnologías Microsoft, para poder discernir cuál es la que mejor se adapta (o adaptará) a nuestras necesidades. 

1 comentario:

  1. Excelente, apoyo tu conclusión ninguna es mejor que la otra todo dependerá de la finalidad que se tenga en el proyecto.

    ResponderEliminar