tutorial net mvc español asp asp.net-mvc model-view-controller

español - ¿Qué es ASP.Net MVC?



mvc asp.net c# (8)

Cuando escuché por primera vez sobre StackOverflow, y escuché que se estaba construyendo en ASP.Net MVC, estaba un poco confundido. Pensé que ASP.Net siempre fue un ejemplo de una arquitectura MVC. Tiene la página .aspx que proporciona la vista, la página .aspx.vb que proporciona el controlador y puede crear otra clase para que sea el modelo. El proceso para usar MVC en ASP.Net se describe en este artículo de Microsoft .

Entonces mi pregunta es ¿Qué proporciona ASP.Net MVC que no sería capaz de hacer con ASP.Net regular (incluso desde ASP.Net 1.1)? ¿Son solo URLs extravagantes? ¿Es solo para los derechos de alardear de que los Estados miembros puedan compararse con las nuevas tecnologías como Ruby On Rails y decir: "también podemos hacer eso"? ¿Hay algo más que ASP.Net MVC realmente proporciona, en lugar de un par de plantillas adicionales en el menú Archivo-> Nuevo?

Probablemente parezca realmente escéptico y negativo en este momento, así que me detendré. Pero realmente quiero saber qué proporciona ASP.Net MVC en realidad. Además, si alguien puede decirme por qué es Model-View-Controller y no en orden de las capas de View-Controller-Model o Model-Control-View dependiendo de si va de arriba a abajo, o viceversa, lo haría realmente lo aprecio también

EDITAR

Además, probablemente valga la pena señalar que nunca me han importado realmente los modelos de formularios web (control de servidor AKA) tampoco. Solo lo he usado mínimamente, y nunca en el trabajo.


.aspx no cumple con el patrón MVC porque la página aspx (la ''vista'') se llama antes que el código subyacente (el ''controlador'').

Esto significa que el controlador tiene una "dependencia dura" en la vista, lo cual es muy contrario a los principios de MVC.

Uno de los principales beneficios de MVC es que le permite probar su controlador (que contiene mucha lógica) sin instanciar una vista real. Simplemente no puedes hacer esto en el mundo .aspx.

Probar el controlador por sí solo es mucho más rápido que tener que crear una instancia de una tubería entera asp.net (solicitud, solicitud, respuesta, estado de vista, estado de sesión, etc.).


ASP.Net con su código detrás es casi MVC, pero no lo único que hace que no sea que los códigos subyacentes están directamente relacionados con los aspx, que es un gran componente de MVC. Si está pensando en el código subyacente como controlador, debe estar completamente desacoplado de la vista. El nuevo .NET MVC complementa esto, y trae un marco completo de MVC. Aunque ya existen para .NET (ver Spring.NET).


Principalmente, hace que sea muy fácil crear sitios web comprobables con separaciones de responsabilidad bien definidas. También es mucho más fácil crear interfaces de usuario XHTML válidas utilizando el nuevo marco MVC.

He utilizado el segundo CTP (creo que ahora tienen cinco) para comenzar a trabajar en un sitio web y, habiendo creado algunas aplicaciones web antes, tengo que decir que es cientos de veces mejor que usar el modelo de control del servidor.

Los controles del servidor están bien cuando no sabes lo que estás haciendo. A medida que comienzas a aprender sobre cómo deberían funcionar las aplicaciones web, empiezas a luchar contra ellas. Finalmente, debe escribir el suyo para superar las deficiencias de los controles actuales. Es en este punto donde el MVC comienza a brillar. Y eso ni siquiera está considerando la capacidad de prueba de su sitio web ...


¡No más ID html autogenerados! Cualquiera que haga algún tipo de javascript aprecia este hecho.




Scott Guthrie lo explicó en este post " ASP.NET MVC Framework "

  • Permite una separación limpia de preocupaciones, capacidad de prueba y TDD por defecto. Todos los contratos principales dentro del marco MVC están basados ​​en interfaces y son fácilmente modificables (incluye intrínsecos basados ​​en interfaz IHttpRequest / IHttpResponse). Puede probar la aplicación sin tener que ejecutar los Controladores dentro de un proceso ASP.NET (lo que hace que la prueba de la unidad sea rápida). Puede usar cualquier marco de prueba de unidades que desee hacer esta prueba (incluidos NUnit, MBUnit, MS Test, etc.).

  • Es altamente extensible y conectable. Todo en el marco de MVC está diseñado para que pueda ser reemplazado / personalizado fácilmente (por ejemplo: opcionalmente puede agregar su propio motor de vista, política de enrutamiento, serialización de parámetros, etc.). También admite el uso de inyección existente de dependencia y modelos de contenedores IOC (Windsor, Spring.Net, NHibernate, etc.).

  • Incluye un componente de asignación de URL muy potente que le permite crear aplicaciones con URL limpias. Las URL no necesitan tener extensiones dentro de ellas, y están diseñadas para admitir fácilmente patrones de nomenclatura SEO y REST. Por ejemplo, podría mapear fácilmente / products / edit / 4 URL a la acción "Editar" de la clase ProductsController en mi proyecto anterior, o asignar el / Blogs / scottgu / 10-10-2007 / SomeTopic / URL a un " DisplayPost "acción de una clase BlogEngineController.

  • El marco MVC admite el uso de los archivos ASP.NET .ASPX, .ASCX y .Master existentes como "plantillas de vista" (lo que significa que puede usar fácilmente características existentes de ASP.NET, como páginas maestras anidadas, <% =%> fragmentos, declaraciones controles de servidor, plantillas, enlace de datos, localización, etc.). Sin embargo, no utiliza el modelo de postback existente para las interacciones con el servidor. En su lugar, enrutará todas las interacciones del usuario final a una clase de Controlador, lo que ayuda a garantizar una separación clara de las inquietudes y la capacidad de prueba (también significa que no hay estado de visualización o ciclo de vida de la página con vistas basadas en MVC).

  • El framework ASP.NET MVC soporta completamente las características existentes de ASP.NET como autenticación de formularios / ventanas, autorización URL, membresía / roles, salida y almacenamiento en memoria caché de datos, administración de estado de sesión / perfil, monitoreo de estado, sistema de configuración, arquitectura de proveedor, etc.


Miré un par de ejemplos simples como este . Puedo ver la diferencia. Sin embargo, realmente no veo cómo MVC desacopla la vista desde el controlador. La vista todavía hace referencia a cosas que están en el controlador. Veo cómo hace que sea mucho más fácil de probar, y que al menos en MVC el controlador no tiene ningún conocimiento de la vista. Y no tendría que procesar la vista para llamar a los métodos en el controlador. Puedo ver que es un gran salto, aunque a primera vista no parezca mucho.

Estoy de acuerdo con @Will sobre la lucha contra los controles del servidor. Nunca trabajé en una situación en la que realmente se usaban, pero muchas personas que conozco que tienen, han tenido bastantes limitaciones con ellos.