Introducción al ASP.NET MVC
Entendiendo la arquitectura Modelo-Vista-Controlador para ASP.NET MVC
El modelo vista controlador es una arquitectura nacida allá por los años 70’s en el departamento de investigación de XEROX PARC, en su concepción estuvo ligado con SmallTalk un lenguaje orientado a objetos. Con el pasar de los años esta arquitectura ha sido implementada en varios Frameworks para distintas áreas.
Para el caso particular de nuestro articulo y como el nombre lo dice voy a enfocar la explicación sobre el Framework MVC para ASP.NET, esta implementación de la arquitectura Modelo-Vista-Controlador tiene aspectos particulares sobre como implementa la arquitectura, por lo cual puede que existan ligera variaciones respecto a otras implementaciones.
Separación de Ocupaciones (Concerns)
La separación de ocupaciones es uno de los pilares que definen la arquitectura Modelo-Vista-Controlador, definiendo tres capas o niveles que son:
Modelo.- Esta capa se ocupa o maneja todo lo concerniente a los ítems, reglas y operaciones relacionadas al problema en cuestión, que debe de resolver nuestra aplicación, por ejemplo si nuestro problema es el manejo de personal de una empresa, en esta capa es donde nosotros debemos de definir las reglas de negocios como por ejemplo los descuentos por retrasos o inasistencia o también como se contabilizan los días de vacaciones.
Vista.- Esta es la capa de la Interfaz Grafica del Usuario (UI), aquí definimos como se deberá de desplegar los datos manejados por la capa del modelo, entradas y salidas.
Controlador.- La capa controlador es quien maneja las peticiones del usuario, en base a estas peticiones llama a las distintas partes asociadas en el modelo y despliega una vista adecuada.
Con esta división tan interesante de asuntos (concerns), nos permite que la capa ocupada de la vista pueda se cambiada cuando uno quiera por cualquier otra tecnología (HTML, Silverlighth, etc) sin tener que mover ni el modelo ni el controlador, también al estar separada la función del manejo de las peticiones a través de la capa controlador nos permite automatizar los tests a través de “Unit Tests”.
¿Cómo funciona el Modelo – Vista – Controlador?
Para comenzar un método publico de la clase controlador es llamado a través de una URL por el navegador (azul) después este método llama a alguna función del modelo de nuestro sistema y recibe una respuesta (rojo), luego con esta respuesta el controlador llama a algún método de la clase vista, el método de la clase vista a su vez genera código html y lo envía de vuelta al navegador (morado), como se puede ver es un proceso simple y lógico que ayuda a una buena separación de ocupaciones, permitiendo una desacoplamiento optimo de componentes.
ASP.NET MVC
ASP.NET MVC es una implementación reciente de la arquitectura Modelo-Vista-Controlador sobre la base ya existente del Framework ASP.NET otorgándonos de esta manera un sin fin de funciones que son parte del ecosistema del Framework .NET, además que nos permite el uso de lenguajes de programación robustos como C#, no menciono VB.NET por que no es santo de mi devoción, inclusive me parece un lenguaje un tanto endeble a pesar de que posee muchas funciones parecidas a C#, pero eso es material para otro articulo.
ASP.NET MVC nace como una opción para hacer frente al ya consagrado y alabado Ruby on Rails un framework que procura hacer uso de buenas practicas de programación como la integración de Unit tests o la separación clara de ocupaciones, dándonos casi todos los beneficios otorgados por Ruby on Rails y sumando el gran y prolijo arsenal proporcionado por .NET.
Entre las características más destacables de ASP.NET MVC tenemos las siguientes:
- Uso del patrón Modelo-Vista-Controlador.
- Facilidad para el uso de Unit Tests.
- Uso correcto de estándares Web y REST.
- Sistema eficiente de routing de links.
- Control a fondo del HTML generado.
- Uso de las mejores partes de ASP.NET.
- Es Open Source.
¿ASP.NET MVC es mejor que ASP.NET tradicional?
Este es un tema un poco álgido, inclusive para la gente de Microsoft por que si se fijan bien en la próxima actualización grande de .NET (4.0) tanto ASP.NET MVC y el ASP.NET tradicional van a convivir poniendo al descubierto que ASP.NET MVC no va reemplaza al ASP.NET tradicional e indicándonos que ambas tecnologías son alternativas una con otra, ante esto una pregunta mas adecuada seria ¿En que ámbitos es mejor usar ASP.NET MVC en reemplazo al ASP.NET tradicional?, esta pregunta se responde fácilmente, ASP.NET MVC lo deberíamos usar cuando tengamos que hacer un SW que sea de gran envergadura y en donde la mantenibilidad y escalabilidad sean factor primordiales, en contraste deberíamos de usar ASP.NET tradicional cuando hagamos aplicaciones simples donde el factor primordial sea el tiempo.
Desde mi punto de vista ASP.NET tradicional es una tecnología pasada de moda, con muchas falencias que debería dejarse en el pasado, como ejemplo les pongo como ejemplo una experiencia, esto se suscito hace unos cuantos meses cuando yo aun no sabia desarrollar con ASP.NET MVC, el trabajo que me asignaron en la Universidad consistía en desarrollar un pequeño sitio de venta de computadoras para lo cual me asignaron el tiempo de 3 semanas, en un principio relativizando el trabajo gracias a que semanas antes hice un sitio parecido en PHP en menos de una semana, cuando llego el momento de programar el trabajo empezó mi martirio, ASP .NET no me permitía integrar fácilmente Unit Test, el código HTML generado por los controles era pésimo e ilegible y no digamos nada del Debugging, sumado a eso problemas que se podrían denominar “técnicos”, se sumaron los problemas concernientes a la capa del dominio, gracias a que con el ASP.NET tradicional se hace muy difícil el separar las operaciones propias de las políticas del negocio con las operaciones “técnicas” o de implementación, con todo eso en mente para mi el ASP.NET tradicional no tendria que ser usado para crear aplicaciones de gran tamaño, que requieran un mantenimiento constante.
Bueno con esta breve expiación de cómo funciona el patrón Modelo-Vista-Controlador y que es ASP.NET MVC me despido hasta la próxima.
Bye
PD.- Aqui tienen un ejemplo de una aplicacion simple que hice con ASP.NET MVC 3
No estoy de acuerdo con que asp.net tradicional es solo para aplicaciones minúsculas. Creo que es muy absoluto tu criterio. Aunque ASP.NET MVC mejora y pone a tono a .NET con lo que ya hace hace años se hace en frameworks como Django.
ResponderEliminarTienes razon me excedi un poco en mi criterio y viendolo un poco mejor, ahora diria que el ASP.NET tradicional puede ser usado para crear hasta aplicaciones de envergadura mediana, pero mas de eso no lo recomendaria.
ResponderEliminarGracias por la observacion
¿Porque no usar mvc para todo?, cuando aprendes bien a trabajar con el patron mvc automaticamente creas la arquitectura conforme a este patron. La experiencia me ha dicho que cuando hacen comentarios como el tuyo es que aun no dominan bien los patrones, por eso se les dificulta trabajar asi.
ResponderEliminarAhh la verdad, no puedo decir que soy un herudito en mvc, un tanto el hecho de escribir este blog es para que yo mismo aprenda. Pero aun asi apartando el hecho de dominar o no el patron creo que el hecho de usarlo en todo depende de cada uno, como los gustos y para los gustos los colores y en 32 bits =).
ResponderEliminarGracias por los comentarios, y por favor pongan sus nicks para los proximos comentarios.
Interesante blog...
ResponderEliminarTengo un proyecto en el que el sistema a programar debe permitir a un director de un hospital acceder a las consultas hechas por los médicos a sus pacientes. ASP.NET (tradicional o MVC) me permite hacer esto?
Ambas tecnologias te permiten hacer eso, pero la que te recomendaria seria ASP.NET MVC ya que estoy seguro que les va a servir de ayuda a los del hospital y te van a pedir nuevas caracteristicas y como viste el ASP.NET MVC esta hecho para crecer rapidamente.
ResponderEliminarcomo puedo conectar un proyecto mvc con otra wcf???
ResponderEliminarBuenas tardes,
ResponderEliminarMe encuentro ubicado en Medellin y quisiera saber como puedo acceder al conocimiento de esta herramienta ASP, ya que en mi dia a dia en la empresa donde laboro seria muy util poder poner en funcionamiento esta herramienta aplicada muchos procesos.
mil gracias, quedo atento de sus comentarios al respecto.
Att. Edgar Pineda
Edgar para poder trabajar con APS.NET MVC puedes
ResponderEliminarbajarte el Visual Studio 2010 de http://www.microsoft.com/visualstudio/en-us/download que contiene todas las herramientas necesarias para que te puedas poner a desarrollar.
Saludos amigos!!! Tengo años programando, pero tengo una pequeña consulta... El Modelo MVC depende de alguna plataforma específica para poder programar en él? A ver si me doy a entender... Si deseo programar una aplicación de consola, abro mi Notepad de Windows y edito un código y lo compilo con el framework, que es GRATUITO! por ahora. Si quiero hacer una página aspx, tambien la edito en mi Notepad y la cuelgo del IIS en un directorio virtual y chaz! tengo una página web que accesa y administra datos... Pero mi duda radica en que, si quiero diseñar o trabajar con el MVC, podría generarla sin necesidad del visual studio, solo con el framework?
ResponderEliminarHola Adrian, claro que puedes usar solo el Compilador por linea de comandos,ya que solo la parte del controlador y el modelo son compilados. Pero si quieres trabajar con productos sin costo, por que no pruebas la version express de Visual C# o Visual Web Developer. Los puedes encontrar aqui: http://www.microsoft.com/express/windows/
ResponderEliminarBueno ojala te sirva
Estimado:
ResponderEliminarYo quiero aprender a programar en c# utilizando el patron mvc.
Mi consulta es que necesito (libros, sitios, etc)
Para lograrlo......
Quiero hacer sitios web, aplicaciones web, etc.
Gracias.
Hola Ariel, que bien que te haya gustado esta hermosa tecnologia traida de la mano de microsoft.
ResponderEliminarSi quieres aprender ASP.NET MVC te sugiero el siguiente libro:
- PRO ASP.NET MVC de Steven Sanderson
En cuanto a sitios web, te sugiero el sitio oficial de ASP.NET MVC (www.asp.net), donde hay un monton de documentacion, lamentablemente (si no sabes ingles) todos los recursos que te sugiero estan en ingles, si deseas contenido en espaniol deberas buscar un buen rato en google o bing.
Agún día explicarás porqué VB.NET es un lenguaje un tanto endeble (si puedes ...)
ResponderEliminarAlgo así como: Lo que puede hacerse con C# pero no con VB.NET
Y LO MEJOR ES CUANDO LO CONVINAS CON JQGRID Y JQUERY QDAN IMPRESIONANTES Y SE AHORRA MUCHO TIEMPO AL CREAR CATALOGOS
ResponderEliminarUna pregunta:
ResponderEliminar¿Se puede comunicar la vista con el modelo directamente?
Si tengo un grid en el formulario que necesita unos datos de la BD puede pedirselo directamente
Estoy interesado en el desarrollo MVC, pero lo que no me parece es que el diseño de vitas se tenga que hacer por codigo. Eso me parece un retroceso o al menos una limitante, para quienes por ejemmplo veniasmos de VB6.0.
ResponderEliminarNo creo que sea una buena idea utilizar MVC para todo, dado que hay sistemas muy sencillos cuyo tiempo de elaboración requerido es ínfimo.
ResponderEliminarDefinitivamente coincido contigo en el punto de que sistemas complejos tienen en MVC una excelente opción.
Google Android Open Handheld platform, no puedo ver lo por que será, que estoy haciendo mal
ResponderEliminar