ASP.NET WebForms vs ASP.NET MVC, la nueva batalla

Últimamente los debates de C# o VB.Net quedaron atrás, ahora los nuevos debates dentro del mundillo .Net están entre usar ASP.NET Web Forms o ASP.NET MVC. Imaginen la desorientación sobre el tema, que hasta se dedico una sesión del MIX 2009 a tratar sobre este tema: Choosing between ASP.NET Web Forms and MVC. En los inicios de ASP.NET su principal objetivo era ganar terreno a PHP, JSP, y las otras tecnologías existentes, vendiendo que hacer aplicaciones Web era como hacer aplicaciones Windows, aunque haya un trabajo extra por detrás. Con los años de este Framework el uso de la comunidad ha hecho los Web Forms evolucionen, esfuerzos como reducir el tamaño del ViewState, los CSS Adapters, los Starter Kits, las buenas prácticas, entre otras, han ido mejorando el Framework. De hecho no creo que de Microsoft escuchemos no usen Web Forms, ahora usen ASP.NET MVC, por que por parte de ellos y de la comunidad hubo un gran esfuerzo, y mucho cariño, por hacer que los Web Forms, sean un buen Framework de desarrollo Web.
Antes de empezar quisiera usar y resaltar esta línea de un post de ScottGu relacionado con esta discusión, About Technical Debates (and ASP.NET Web Forms and ASP.NET MVC debates in particular):
“Great developers using bad tools/frameworks can make great apps. Bad developers using great tools/frameworks can make bad apps.”
Al citar esta cifra, creo que deben tener un idea de cual es mi punto de vista. Ahora dividamos el problema, vamos a establecer dos grupos de usuarios para dar nuestros comentarios:
- Grupo de usuarios experimentados de ASP.NET, que tienen varios proyectos en producción y que no han tenido problemas de rendimiento, tiempo de respuesta, etc, cuando han desarrollado proyectos usando WebForms.
- Grupo de usuarios nuevos de ASP.NET (y en general nuevos en el desarrollo Web), cuyo primero contacto fue hacer proyectos Web usando ASP.NET, y que no han tenido buenos resultados, han tenido problemas de rendimiento, de tiempo de respuesta, de diseño, y todos los que encontramos en los foros.
Usando el mismo patrón que recomendó Jorge Serrano en este artículo, C# o VB, VB o C#,... la envidia me corroe, si eres un usuario experimentando, no necesitas recomendaciones, sólo revisar las características de ASP.NET MVC y ver si alguna de ellas es la estabas buscando: ASP.NET MVC Overview. Cerramos el tema con ellos, y nos dedicamos a los usuarios nuevos en el desarrollo Web y que van a empezar con ASP.NET.
El problema para los nuevos usuarios, y para los que toman como cierto el mensaje: “Desarrolla Aplicaciones Web como si lo hicieras con Windows Forms, sólo arrastras controles y ya tienes tu Aplicación Web”. Y lo toman literalmente, no necesitan aprender la diferencia entre POST Y GET, no hay porque aprender el significado de QueryString, no es necesario saber si es malo guardar un DataSet en el ViewState de la página, sólo la hago para ya no consultar la base de datos y no tener lenta mi aplicación, no se preocupan en aprender HTML, no se preocupan en aprender JavaScript, entre todas las otras que suelen dejarse de aprender.
Entonces si eres un usuario nuevo en ASP.NET (y si no eres nuevo y no sabes que que usa POST o GET), la recomendación básica es aprender los fundamentos del desarrollo Web:
Estos son WebCasts impartidos por el amigo Jonas Stawski. Es más si pueden traten de hacer pequeñas Web simples usando sólo ASP clásico, verán los resultados y la diferencia cuando después aprendan ASP.NET.
Si ya aprendieron los fundamentos, la elección será más fácil. Por otro lado, tampoco es que ASP.NET MVC cambie totalmente la forma de hacer aplicaciones Web Forms, hay muchas funcionalidades que comparten en un común, la diferencia principal esta en como presentar el fron-ed al usuario, no vamos a entrar en detalles muy técnico por que quizás si fuerzas a cualquier de los dos frameworks puedes lograr la funcionalidad del otro, pero vamos mostrar el siguiente gráfico para mostrar algunas diferencias, y como podemos elegir en que escenario usar uno u otro:

Fuente del gráfico, y otro más detallado.
Como recomendación final, podríamos establecer la siguiente línea para aprender correctamente cualquier de las tecnologías y no caer en las malas practicas:
- Aprender Html
- Aprender JavaScript
- Aprender ASP Clásico
- Aprender ASP.NET MVC
- Aprender ASP.NET Web Forms
Aprender al final ASP.Net Web Forms, nos ayudará a entender porque algunas opiniones dicen no usar Web Forms, principalmente por el mágico ViewState que hace que los WebForms sean Stateful, por el contrario de toda la Web que es Stateless.
Otros artículos con algunos detalles de este versus, unos más técnicos que otros:
Saludos,