He estado jugando con ASP.NET MVC desde el CTP, y me gustan muchas cosas que hicieron, pero hay cosas que simplemente no entiendo.
Por ejemplo, descargué beta1, y estoy armando un pequeño sitio / currículum / blog personal con él. Aquí hay un fragmento de la vista ViewSinglePost:
<%
// Display the "Next and Previous" links
if (ViewData.Model.PreviousPost != null || ViewData.Model.NextPost != null)
{
%> <div> <%
if (ViewData.Model.PreviousPost != null)
{
%> <span style="float: left;"> <%
Response.Write(Html.ActionLink("<< " + ViewData.Model.PreviousPost.Subject, "view", new { id = ViewData.Model.PreviousPost.Id }));
%> </span> <%
}
if (ViewData.Model.NextPost != null)
{
%> <span style="float: right;"> <%
Response.Write(Html.ActionLink(ViewData.Model.NextPost.Subject + " >>", "view", new { id = ViewData.Model.NextPost.Id }));
%> </span> <%
}
%>
<div style="clear: both;" />
</div> <%
}
%>
¡Asqueroso! (También tenga en cuenta que el HTML es un marcador de posición temporal HTML, haré un diseño real una vez que la funcionalidad esté funcionando) .
¿Estoy haciendo algo mal? Porque pasé muchos días oscuros en ASP clásico, y esta sopa de etiqueta me lo recuerda mucho.
Todos predican cómo puedes hacer HTML más limpio. ¿Adivina qué? El 1% de todas las personas miran el HTML generado. Para mí, no me importa si Webforms desordena mi sangría en el HTML renderizado, siempre que tenga un código que sea fácil de mantener ... ¡Esto no lo es!
Entonces, conviértanme, un tipo de webformas duro, ¿por qué debería renunciar a mis páginas ASPX bien formadas para esto?
Editar: en negrita la línea "temp Html / css" para que la gente se moleste por eso.
fuente
Respuestas:
En comparación con los formularios web, MVC es al mismo tiempo un enfoque de nivel inferior para la generación de HTML con un mayor control sobre la salida de la página y un enfoque de nivel superior más orientado a la arquitectura. Permítanme capturar formularios web y MVC y mostrar por qué creo que la comparación favorece los formularios web en muchas situaciones, siempre y cuando no caigan en algunas trampas clásicas de formularios web.
Formularios web
En el modelo de formularios web, sus páginas corresponden directamente a la solicitud de página del navegador. Por lo tanto, si dirige a un usuario a una lista de Libros, es probable que tenga una página en algún lugar llamada "Booklist.aspx" a la que lo dirigirá. En esa página, deberá proporcionar todo lo necesario para mostrar esa lista. Esto incluye código para extraer datos, aplicar cualquier lógica de negocios y mostrar los resultados. Si hay alguna lógica arquitectónica o de enrutamiento que afecte a la página, también deberá codificar la lógica arquitectónica en la página. El buen desarrollo de formularios web generalmente implica el desarrollo de un conjunto de clases de soporte en una DLL separada (comprobable por unidad). Estas clases manejarán la lógica empresarial, el acceso a datos y las decisiones arquitectónicas / de enrutamiento.
MVC
MVC adopta una visión más "arquitectónica" del desarrollo de aplicaciones web: ofrece un andamio estandarizado sobre el cual construir. También proporciona herramientas para generar automáticamente clases de modelo, vista y controlador dentro de la arquitectura establecida. Por ejemplo, tanto en Ruby on Rails (solo "Rails" de aquí en adelante) como en ASP.NET MVC siempre comenzará con una estructura de directorios que refleje su modelo general de arquitectura de aplicaciones web. Para agregar una vista, modelo y controlador, usará un comando como "Rails script / generate scaffold {modelname}" de Rails (ASP.NET MVC ofrece comandos similares en el IDE). En la clase de controlador resultante, habrá métodos ("Acciones") para Índice (mostrar lista), Mostrar, Nuevo y Editar y Destruir (al menos en Rails, MVC es similar). Por defecto, estos "
El diseño de directorios y archivos es significativo en MVC. Por ejemplo, en ASP.NET MVC, el método de índice para un objeto "Libro" probablemente solo tendrá una línea: "Vista de retorno ();" A través de la magia de MVC, esto enviará el modelo de Libro a la página "/View/Books/Index.aspx" donde encontrará código para mostrar Libros. El enfoque de Rails es similar, aunque la lógica es un poco más explícita y menos "mágica". A Ver la página en una aplicación MVC es generalmente más simple que una página Web Forms, ya que no tienen que preocuparse tanto de enrutamiento, la lógica de negocio o el manejo de datos.
Comparación
Las ventajas de MVC giran en torno a una separación limpia de preocupaciones y un modelo más limpio, más centrado en HTML / CSS / AJAX / Javascript para producir su salida. Esto mejora la capacidad de prueba, proporciona un diseño más estandarizado y abre la puerta a un tipo de sitio web más "Web 2.0".
Sin embargo, también hay algunos inconvenientes importantes.
Primero, aunque es fácil poner en marcha un sitio de demostración, el modelo arquitectónico general tiene una curva de aprendizaje significativa. Cuando dicen "Convención sobre configuración" suena bien, hasta que te das cuenta de que tienes un libro de convenciones para aprender. Además, a menudo es un poco irritante para averiguar lo que está pasando, ya que está confiando en la magia en lugar de llamadas explícitas. Por ejemplo, que "Vista de retorno ();" llamar arriba? La misma llamada exacta se puede encontrar en otras acciones, pero van a diferentes lugares. Si entiendes la convención MVCentonces sabes por qué se hace esto. Sin embargo, ciertamente no califica como un ejemplo de buen nombre o código fácilmente comprensible y es mucho más difícil para los nuevos desarrolladores elegir que Web Forms (esto no es solo una opinión: tuve un pasante de verano que aprendió Web Forms el año pasado y MVC este año y las diferencias en productividad fueron pronunciadas, a favor de los formularios web). Por cierto, Rails es un poco mejor en este sentido, aunque Ruby on Rails presenta métodos dinámicamente nombrados que también requieren un poco de tiempo para acostumbrarse.
En segundo lugar, MVC asume implícitamente que está creando un sitio web clásico de estilo CRUD. Las decisiones arquitectónicas y especialmente los generadores de código están diseñados para admitir este tipo de aplicación web. Si está creando una aplicación CRUD y desea adoptar una arquitectura probada (o simplemente no le gusta el diseño de la arquitectura), entonces probablemente debería considerar MVC. Sin embargo, si va a hacer más que CRUD y / o es razonablemente competente con la arquitectura, MVC puede parecer una camisa de fuerza hasta que realmente domine el modelo de enrutamiento subyacente (que es considerablemente más complejo que simplemente enrutar en una aplicación WebForms). Incluso entonces, sentí que siempre estaba luchando contra el modelo y me preocupaban los resultados inesperados.
En tercer lugar, si no te interesa Linq (ya sea porque temes que Linq-to-SQL vaya a desaparecer o porque encuentres que Linq-to-Entities se ríe de forma excesiva y esté subproducido), entonces tampoco quieres caminar por este camino, ya que las herramientas de andamios ASP.NET MVC están construidas alrededor de Linq (este fue el asesino para mí). El modelo de datos de Rails también es bastante torpe en comparación con lo que puede lograr si tiene experiencia en SQL (¡y especialmente si está bien versado en TSQL y procedimientos almacenados!).
Cuarto, los defensores de MVC a menudo señalan que las vistas de MVC están más cerca en espíritu del modelo HTML / CSS / AJAX de la web. Por ejemplo, "HTML Helpers", las pequeñas llamadas de código en su página de vista que intercambian contenido y lo colocan en controles HTML, son mucho más fáciles de integrar con Javascript que los controles de formularios web. Sin embargo, ASP.NET 4.0 introduce la capacidad de nombrar sus controles y, por lo tanto, elimina en gran medida esta ventaja.
Quinto, los puristas de MVC a menudo se burlan de Viewstate. En algunos casos, tienen razón en hacerlo. Sin embargo, Viewstate también puede ser una gran herramienta y una bendición para la productividad. A modo de comparación, manejar Viewstate es mucho más fácil que intentar integrar controles web de terceros en una aplicación MVC. Si bien la integración de controles puede ser más fácil para MVC, todos los esfuerzos actuales que he visto sufren de la necesidad de construir un código (algo inestable) para vincular estos controles a la clase de Controlador de la vista (es decir, para evitar el modelo MVC )
Conclusiones
Me gusta el desarrollo de MVC de muchas maneras (aunque prefiero Rails a ASP.NET MVC por asomo). También creo que es importante que no caigamos en la trampa de pensar que ASP.NET MVC es un "antipatrón" de ASP.NET Web Forms. Son diferentes pero no completamente extraños y ciertamente hay espacio para ambos.
Sin embargo, prefiero el desarrollo de formularios web porque, para la mayoría de las tareas , es simplemente más fácil hacer las cosas (la excepción es la generación de un conjunto de formularios CRUD). MVC también parece sufrir, en cierta medida, un exceso de teoría. De hecho, mire las muchas preguntas formuladas aquí en SO por personas que conocen ASP.NET orientado a páginas pero que están probando MVC. Sin excepción, hay mucho crujir de dientes a medida que los desarrolladores descubren que no pueden realizar tareas básicas sin saltar a través de aros o soportar una gran curva de aprendizaje. Esto es lo que hace que Web Forms sea superior a MVC en mi libro: MVC te hace pagar un precio del mundo real para ganar un poco más de capacidad de prueba o, lo que es peor, para que te vean simplemente genial porque estás usando elúltima tecnología.
Actualización: Me han criticado mucho en la sección de comentarios, algunos de ellos bastante justos. Por lo tanto, ¡pasé varios meses aprendiendo Rails y ASP.NET MVC solo para asegurarme de que realmente no me estaba perdiendo la próxima gran cosa! Por supuesto, también ayuda a garantizar que proporcione una respuesta equilibrada y adecuada a la pregunta. Debes saber que la respuesta anterior es una gran reescritura de mi respuesta inicial en caso de que los comentarios no estén sincronizados.
Mientras miraba más de cerca a MVC, pensé, por un momento, que terminaría con un gran mea culpa. Al final, llegué a la conclusión de que, si bien creo que debemos gastar mucha más energía en la arquitectura y la capacidad de prueba de los formularios web, MVC realmente no responde la llamada por mí. Entonces, un cordial "gracias" a las personas que proporcionaron críticas inteligentes de mi respuesta inicial.
En cuanto a aquellos que vieron esto como una batalla religiosa y que diseñaron implacablemente las inundaciones de votos negativos, no entiendo por qué se molestan (más de 20 votos negativos en segundos en varias ocasiones ciertamente no es normal). Si está leyendo esta respuesta y se pregunta si hay algo realmente "incorrecto" en mi respuesta dado que el puntaje es mucho más bajo que algunas de las otras respuestas, puede estar seguro de que dice más sobre algunas personas que están en desacuerdo que el sentido general de la comunidad (en general, esta ha sido votada más de 100 veces).
El hecho es que muchos desarrolladores no se preocupan por MVC y, de hecho, esta no es una visión minoritaria (incluso dentro de MS como parecen indicar los blogs).
fuente
MVC le da más control sobre su salida, y con ese control viene un mayor riesgo de escribir HTML mal diseñado, etiqueta de sopa, etc.
Pero al mismo tiempo, tiene varias opciones nuevas que no tenía antes ...
Ahora, eso no quiere decir que no pueda hacer ninguna de estas cosas con WebForms, pero MVC lo hace más fácil.
Todavía uso WebForms para cuando necesito crear rápidamente una aplicación web, ya que puedo aprovechar los controles del servidor, etc. WebForms oculta todos los detalles de las etiquetas de entrada y los botones de envío.
Tanto WebForms como MVC son capaces de basura absoluta si eres descuidado. Como siempre, una planificación cuidadosa y un diseño bien pensado dará como resultado una aplicación de calidad, independientemente de si es MVC o WebForms.
[Actualizar]
Si también sirve de consuelo, MVC es solo una tecnología nueva y en evolución de Microsoft. Ha habido muchas publicaciones en las que WebForms no solo permanecerá, sino que continuará desarrollándose para ...
http://haacked.com
http://www.misfitgeek.com
http://rachelappel.com
... y así...
Para aquellos preocupados por la ruta que está tomando MVC, les sugiero que den su opinión a "los chicos". ¡Parecen estar escuchando hasta ahora!
fuente
La mayoría de las objeciones a ASP.NET MVC parecen centrarse en las vistas, que son uno de los bits más "opcionales" y modulares de la arquitectura. NVelocity , NHaml , Spark , XSLT y otros motores de vista pueden cambiarse fácilmente (y cada vez es más fácil). Muchos de ellos tienen una sintaxis MUCHO más concisa para hacer el formato y la lógica de presentación, al tiempo que ofrecen un control completo sobre el HTML emitido.
Más allá de eso, casi todas las críticas parecen reducirse al etiquetado <%%> en las vistas predeterminadas y lo "feo" que es. Esa opinión a menudo se basa en el uso del enfoque de WebForms, que simplemente mueve la mayoría de la fealdad ASP clásica al archivo de código subyacente.
Incluso sin hacer "incorrectos" los códigos subyacentes, tiene cosas como OnItemDataBound en Repetidores, que es tan estéticamente feo, aunque solo de una manera diferente, como "sopa de etiquetas". Un bucle foreach puede ser mucho más fácil de leer, incluso con incrustación variable en la salida de ese bucle, particularmente si viene a MVC desde otras tecnologías que no son ASP.NET. Se necesita mucho menos Google-fu para comprender el bucle foreach que descubrir que la forma de modificar ese campo en su repetidor es meterse con OnItemDataBound (y el nido de ratas para verificar si es el elemento correcto para cambiar.
El mayor problema con los "espaguetis" impulsados por la etiqueta ASP era más acerca de empujar cosas como conexiones de bases de datos directamente entre el HTML.
Que sucedió que lo hizo usando <%%> es solo una correlación con la naturaleza de espagueti del ASP clásico, no la causalidad. Si mantiene su lógica de vista en HTML / CSS / Javascript y la lógica mínima necesaria para hacer la presentación , el resto es sintaxis.
Al comparar un poco de funcionalidad con WebForms, asegúrese de incluir todos los C # generados por el diseñador y el C # subyacente junto con el código .aspx para asegurarse de que la solución MVC no sea, de hecho, mucho más simple .
Cuando se combina con el uso juicioso de vistas parciales para bits repetibles de lógica de presentación, realmente puede ser agradable y elegante.
Personalmente, deseo que gran parte del contenido de los primeros tutoriales se centre más en este extremo de las cosas que casi exclusivamente en la prueba de manejo, la inversión de control, etc. para oponerse a la "etiqueta de sopa".
De todos modos, esta es una plataforma que todavía está en beta. A pesar de eso, está obteniendo MUCHO más despliegue y desarrolladores que no son de Microsoft construyendo cosas reales con él que la mayoría de la tecnología beta de Microsoft. Como tal, el zumbido tiende a hacer que parezca que está más avanzado que la infraestructura que lo rodea (documentación, patrones de orientación, etc.). Ser realmente utilizable en este punto solo amplifica ese efecto.
fuente
Puedes hacer otra publicación preguntando cómo hacer esto sin incluir el CSS incrustado.
NOTA: ViewData.Model se convierte en Modelo en la próxima versión.
Y con la ayuda de un control de usuario esto se convertiría
donde PagerData se inicializa a través de un constructor anónimo en el manejador de acciones.
editar: Tengo curiosidad por cómo se vería su implementación de WebForm para este problema.
fuente
No estoy seguro de en qué punto la gente dejó de preocuparse por su código.
HTML es la muestra más pública de su trabajo, hay MUCHOS desarrolladores que usan el bloc de notas, el bloc de notas ++ y otros editores de texto sin formato para crear muchos sitios web.
MVC se trata de recuperar el control de los formularios web, trabajar en un entorno sin estado e implementar el patrón de diseño del Controlador de vista de modelo sin todo el trabajo adicional que normalmente se lleva a cabo en la implementación de este patrón.
Si desea controlar, limpiar el código y usar patrones de diseño MVC, esto es para usted, si no le gusta trabajar con el marcado, no le importa qué tan mal esté su marcado, entonces use ASP.Net Web Forms.
Si a usted tampoco le gusta, definitivamente va a hacer la misma cantidad de trabajo en el marcado.
EDITAR También debería indicar que los formularios web y MVC tienen su lugar, de ninguna manera dije que uno era mejor que el otro, solo que cada MVC tiene la fuerza de recuperar el control sobre el marcado.
fuente
Creo que te estás perdiendo algunas cosas. Primero, no hay necesidad de la Respuesta. Escriba, puede usar las
<%= %>
etiquetas. En segundo lugar, puede escribir sus propias extensiones HtmlHelper para realizar acciones comunes. Tercero, un poco de formato ayuda mucho. Cuarto, todo esto probablemente estaría atascado en un control de usuario para ser compartido entre varias vistas diferentes y, por lo tanto, el marcado general en la vista principal es más limpio.Le garantizo que el margen de beneficio todavía no es tan bueno como uno quisiera, pero podría limpiarse considerablemente mediante el uso de algunas variables temporales.
Ahora, eso no es tan malo y sería aún mejor si no tuviera que formatearlo para SO.
fuente
El gran problema con MVC es que es un marco conceptual que existe desde hace mucho tiempo, y ha demostrado ser una forma productiva y poderosa de construir aplicaciones web y aplicaciones de estaciones de trabajo que se escalan horizontal y verticalmente. Se remonta directamente al Alto y Smalltalk. Microsoft llega tarde a la fiesta. Lo que tenemos ahora con ASP.NET MVC es realmente primitivo, porque hay mucho por hacer; pero maldición, están lanzando nuevos lanzamientos rápida y furiosamente.
¿Cuál fue el gran problema con Ruby on Rails? Rails es MVC. Los desarrolladores se han convertido porque, de boca en boca, se ha convertido en la forma en que los programadores pueden ser productivos.
Es un gran negocio; MVC y el respaldo implícito de jQuery son puntos de inflexión para que Microsoft acepte que la plataforma neutral es crítica. Y lo neutral de esto es que, a diferencia de los formularios web, Microsoft no puede encerrarlo conceptualmente. Puede tomar todo su código C # y reimplementarlo en otro idioma por completo (por ejemplo, PHP o Java, lo que sea) porque es el concepto MVC el que es portátil, no el código en sí. (Y piense cuán grande es que puede tomar su diseño e implementarlo como una aplicación de estación de trabajo con poco cambio de código y sin cambio de diseño. Pruebe eso con Web Forms).
Microsoft ha decidido que Web Forms no será el próximo VB6.
fuente
Echa un vistazo a la publicación de Rob Conery. Supongo que lo diré: deberías aprender MVC
fuente
Las dos ventajas principales del marco ASP.NET MVC sobre los formularios web son:
Ahora, estas razones realmente no hacen que ASP.NET MVC sea mejor o peor que los formularios web de una manera en blanco y negro. ASP.NET MVC tiene sus fortalezas y debilidades, al igual que los formularios web. Sin embargo, la mayoría de las quejas sobre ASP.NET MVC parecen provenir de una falta de comprensión sobre cómo usarlo en lugar de fallas reales en el marco. La razón por la cual su código no se siente bien o no se ve bien podría deberse a que tiene varios años de experiencia en formularios web en su haber y solo 1-2 meses de experiencia en ASP.NET MVC.
El problema aquí no es tanto que ASP.NET MVC se mueva o apesta, es que es nuevo y hay muy poco acuerdo sobre cómo usarlo correctamente. ASP.NET MVC ofrece un control mucho más detallado sobre lo que ocurre en su aplicación. Eso puede hacer que ciertas tareas sean más fáciles o más difíciles dependiendo de cómo las abordes.
fuente
Oye, también he tenido problemas para cambiarme a MVC. No soy absolutamente un fanático de la representación clásica de ASP y MVC me recuerda mucho a esos días. Sin embargo, cuanto más uso MVC, más crece en mí. Soy un tipo de formularios web (como muchos lo son) y pasé los últimos años acostumbrándome a trabajar con cuadrículas de datos, etc. Con MVC eso se quitó. Las clases de HTML Helper son la respuesta.
Recientemente, pasé 2 días tratando de encontrar la mejor manera de agregar paginación a una "cuadrícula" en MVC. Ahora, con los formularios web, podría resolver esto en poco tiempo. Pero diré esto ... una vez que tuve las clases de ayuda de paginación creadas para MVC, se volvió extremadamente simple de implementar. Para mí, incluso más fácil que los formularios web.
Dicho esto, creo que MVC será mucho más amigable para los desarrolladores cuando exista un conjunto consistente de HTML Helpers. Creo que vamos a comenzar a ver un montón de clases de ayuda HTML en la web en un futuro próximo.
fuente
Es gracioso porque eso es lo que dije la primera vez que vi formularios web.
fuente
Admito que todavía no obtengo asp.net MVC. Estoy tratando de usarlo en un proyecto paralelo que estoy haciendo pero va bastante lento.
Además de no poder hacer cosas que eran tan fáciles de hacer en formularios web, noto la etiqueta sopa. Realmente parece dar un paso atrás desde esa perspectiva. Sigo esperando que, a medida que aprendo, mejore.
Hasta ahora he notado que la razón principal para usar MVC es obtener un control total sobre su HTML. También leí que asp.net MVC puede servir más páginas más rápido que los formularios web y, probablemente, en relación con esto, el tamaño de página individual es más pequeño que una página de formularios web promedio.
Realmente no me importa cómo se ve mi HTML, siempre y cuando funcione en los principales navegadores, pero me importa la rapidez con la que se cargan mis páginas y cuánto ancho de banda ocupan.
fuente
Si bien estoy totalmente de acuerdo en que es un marcado feo, creo que usar la sintaxis de vista fea para cancelar ASP.NET MVC en su conjunto no es justo. La sintaxis de la vista ha recibido la menor atención de Microsoft, y espero que se haga algo al respecto pronto.
Otras respuestas han discutido los beneficios de MVC en su conjunto, por lo que me centraré en la sintaxis de la vista:
El estímulo para usar Html.ActionLink y otros métodos que generan HTML es un paso en la dirección incorrecta. Esto huele a controles de servidor y, para mí, está resolviendo un problema que no existe. Si vamos a generar etiquetas a partir del código, ¿por qué molestarse en usar HTML? Simplemente podemos usar DOM o algún otro modelo y construir nuestro contenido en el controlador. Ok, eso suena mal, ¿no? Oh sí, separación de preocupaciones, es por eso que tenemos una opinión.
Creo que la dirección correcta es hacer que la sintaxis de la vista sea lo más parecida posible al HTML. Recuerde, un MVC bien diseñado no solo debería brindarle separación del código del contenido, sino que debería permitirle agilizar su producción al contar con personas expertas en el diseño de las vistas (aunque no conozcan ASP.NET), y luego más tarde, como desarrollador, puede intervenir y hacer que la maqueta de vista sea realmente dinámica. Esto solo se puede hacer si la sintaxis de la vista se parece mucho a HTML, de modo que la gente de diseño pueda usar DreamWeaver o lo que sea la herramienta de diseño popular actual. Es posible que esté construyendo docenas de sitios a la vez y necesite escalar de esta manera para lograr la eficiencia de la producción. Permítanme dar un ejemplo de cómo podría ver la vista "lenguaje" funcionando:
Esto tiene varias ventajas:
Entonces, ¿qué hace exactamente esta sintaxis?
mvc: inner = "" - lo que esté entre comillas se evalúa y el HTML interno de la etiqueta se reemplaza con la cadena resultante. (Nuestro texto de muestra se reemplaza)
mvc: external = "" - lo que esté entre comillas se evalúa y el HTML externo de la etiqueta se reemplaza con la cadena resultante. (Nuevamente, el texto de muestra se reemplaza).
{} - esto se usa para insertar resultados dentro de atributos, similar a <% =%>
mvc: if = "" - insde qoutes es la expresión booleana a ser evacuada. El cierre del if es donde se cierra la etiqueta HTML.
mvc: más
mcv: elseif = "" - ...
mvc: foreach
fuente
Ahora, solo puedo hablar por mí mismo aquí:
OMI, si eres un fanático (cualquier cosa), entonces la conversión no es para ti. Si amas los WebForms es porque puedes lograr lo que necesitas y ese es el objetivo de cualquiera.
Webforms hace un buen trabajo al abstraer HTML del desarrollador . Si ese es su objetivo, quédese con los formularios web. Tiene toda la maravillosa funcionalidad de "hacer clic y arrastrar" que ha hecho que el desarrollo de escritorio sea lo que es hoy. Hay muchos controles incluidos (más una gran cantidad de controles de terceros) que pueden generar diferentes funciones. Puede arrastrar una "cuadrícula" que esté directamente asociada con un DataSource desde su base de datos; Viene con edición incorporada, paginación, etc.
A partir de ahora, ASP.NET MVC es muy limitado en términos de controles de terceros. Entonces, nuevamente, si le gusta el Desarrollo rápido de aplicaciones, donde hay muchas funcionalidades conectadas para usted, no debe intentar convertirse.
Con todo esto dicho, aquí es donde brilla ASP.NET: - TDD. El código no es comprobable, dijo nuff.
Separación de intereses. Esa es la columna vertebral del patrón MVC. Soy plenamente consciente de que puede lograr esto en Web Forms. Sin embargo, me gusta la estructura impuesta. En Web Forms era demasiado fácil mezclar diseño y lógica. ASP.NET MVC hace que sea más fácil para diferentes miembros de un equipo trabajar en diferentes secciones de la aplicación.
Viniendo de otro lugar: mi experiencia es CakePHP y Ruby on Rails. Entonces, está claro dónde está mi sesgo. Se trata simplemente de con qué te sientes cómodo.
Curva de aprendizaje: para ampliar el último punto; Odiaba la idea de "modelar" para cambiar la funcionalidad de diferentes elementos. No me gustó el hecho de que gran parte del diseño se realizó en el código detrás del archivo. Era una cosa más que aprender, cuando ya estaba íntimamente familiarizado con HTML y CSS. Si quiero hacer algo en un "elemento" en la página, pego un "div" o "span", le doy una identificación y listo. En Web Forms, tendría que investigar cómo hacerlo.
Estado actual del "diseño" web: las bibliotecas Javascript como jQuery se están volviendo más comunes. La forma en que Web Forms manipula sus ID solo hace que la implementación (fuera de Visual Studio) sea más difícil.
Más separación (diseño): debido a que gran parte del diseño está conectado a sus controles, sería muy difícil para un diseñador externo (sin Web Forms) trabajar en un proyecto de Web Forms. Web Forms fue creado para ser el fin de todo y ser todo.
Una vez más, muchas de estas razones se derivan de mi desconocimiento de los formularios web. Un proyecto de Web Forms (si está diseñado correctamente) puede tener "la mayoría" de los beneficios de ASP.NET MVC. Pero esa es la advertencia: "Si está diseñado correctamente". Y eso es algo que no sé hacer en Web Forms.
Si está haciendo un trabajo estelar en Web Forms, es eficiente y funciona para usted, ahí es donde debe quedarse.
Básicamente, haga una revisión rápida de ambos (intente encontrar una fuente imparcial [buena suerte]) con una lista de pros y contras, evalúe cuál se ajusta a sus objetivos y elija en función de eso.
En pocas palabras, elija el camino de menor resistencia y mayor beneficio para alcanzar sus objetivos. Web Forms es un marco muy maduro y solo mejorará en el futuro. ASP.NET MVC es simplemente otra alternativa (para dibujar en Ruby on Rails y desarrolladores de CakePHP como yo: P)
fuente
Los JSP de Java EE se veían así cuando se propusieron por primera vez: código de scriptlet feo.
Luego ofrecieron bibliotecas de etiquetas para hacerlas más etiquetas HTML. El problema era que cualquiera podía escribir una biblioteca de etiquetas. Algunos de los resultados fueron desastrosos, porque las personas incrustaban mucha lógica (e incluso estilo) en las bibliotecas de etiquetas que generaban HTML.
Creo que la mejor solución es la Biblioteca de etiquetas estándar JSP (JSTL). Es "estándar", HTML tag-ish, y ayuda a evitar que las personas pongan lógica en las páginas.
Un beneficio adicional es que conserva esa línea de demarcación entre diseñadores web y desarrolladores. Los buenos sitios que veo están diseñados por personas con un sentido estético y diseñados para la usabilidad. Presentan páginas y CSS y los pasan a los desarrolladores, que agregan los bits de datos dinámicos. Hablando como desarrollador que carece de estos regalos, creo que regalamos algo importante cuando pedimos a los desarrolladores que escriban páginas web desde la sopa hasta las nueces. Flex y Silverlight sufrirán el mismo problema, porque es poco probable que los diseñadores conozcan bien JavaScript y AJAX.
Si .NET tuviera una ruta similar a JSTL, les aconsejaría que la investigaran.
fuente
Solo pensé en compartir cómo se ve esta muestra con el nuevo y brillante motor de vista Razor, que es el predeterminado desde ASP .NET MVC 3.
¿Algún problema con eso?
Además, en realidad no deberías alinear tus estilos CSS, ¿verdad? ¿Y por qué verificas la nulidad en tres lugares en lugar de solo dos? Un extra
div
rara vez duele. Así es como lo haría:fuente
No puedo hablar directamente con el proyecto ASP.NET MVC, pero en general, los marcos MVC han llegado a dominar el desarrollo de aplicaciones web porque
Ofrecen una separación formal entre las operaciones de la base de datos, la "lógica de negocios" y la presentación.
Ofrecen suficiente flexibilidad en la vista para permitir que los desarrolladores modifiquen su HTML / CSS / Javascript para trabajar en múltiples navegadores, y futuras versiones de esos navegadores
Es esta última parte la que es importante. Con Webforms y tecnologías similares, confía en su proveedor para escribir su HTML / CSS / Javascript por usted. Es algo poderoso, pero no tiene garantía de que la versión actual de Webforms funcione con la próxima generación de navegadores web.
Ese es el poder de la vista. Obtiene el control total sobre el HTML de su aplicación. La desventaja es que debe ser lo suficientemente disciplinado para mantener la lógica en sus vistas al mínimo, y mantener el código de la plantilla lo más simple posible.
Entonces, esa es la compensación. Si los formularios web funcionan para usted y MVC no lo está, siga utilizando los formularios web
fuente
La mayor parte de mi frustración con esto es simplemente no saber cómo hacer las cosas "correctamente". Desde que se lanzó como vista previa, todos hemos tenido un poco de tiempo para mirar las cosas, pero han estado cambiando bastante. Al principio estaba realmente frustrado, pero el marco parece lo suficientemente funcional como para permitirme crear UI extremadamente complejas (léase: Javascript) con bastante rapidez. Entiendo que puede hacer esto con Webforms como lo estaba haciendo antes, pero fue un gran dolor en el trasero tratar de hacer que todo se procesara correctamente. Muchas veces terminaría usando un repetidor para controlar la salida exacta y terminaría con una gran cantidad de desorden de espagueti que también tienes arriba.
En un esfuerzo por no tener el mismo desorden, he estado usando una combinación de tener dominio, capas de servicio y un dto para transferir a la vista. Ponga eso junto con la chispa, un motor de visualización y se vuelve realmente agradable. Se necesita un poco de configuración, pero una vez que lo pones en marcha, he visto un gran paso en la complejidad de mis aplicaciones visualmente, pero es muy simple de codificar.
Probablemente no lo haría exactamente así, pero aquí está tu ejemplo:
Eso es bastante fácil de mantener, comprobable y sabe delicioso en mi sopa de código.
La conclusión es que el código limpio es realmente posible, pero es un gran cambio de la forma en que estábamos haciendo las cosas. Sin embargo, no creo que todos lo asimilen todavía. Sé que todavía lo estoy descubriendo ...
fuente
El libro recientemente publicado de Steve Sanderson 'Pro ASP.NET MVC' [1] [2] de Apress sugiere otra alternativa: crear una extensión HtmlHelper personalizada. Su muestra (del Capítulo 4 en la página 110) utiliza el ejemplo de una lista paginada, pero puede adaptarse fácilmente a su situación.
En su opinión, lo llamaría con un código como este:
[1] http://blog.codeville.net/2009/04/29/now-published-pro-aspnet-mvc-framework-apress/
[2] http://books.google.com/books?id=Xb3a1xTSfZgC
fuente
Esperaba ver una publicación de Phil Haack, pero no estaba aquí, así que solo la corté y la pegué desde http://blog.wekeroad.com/blog/i-spose-ill-just-say-it-you-should -learn-mvc / en la sección de comentarios
fuente
Yo también; Pasaría mi tiempo en Silverlight en lugar de ASP.NET MVC. He probado MVC 1.0 y he echado un vistazo a la última versión 2.0 Beta 1 hace unos días.
No puedo sentir que ASP.NET MVC sea mejor que el formulario web. Los puntos de venta de MVC son:
Pero el formulario web, mediante el uso de código subyacente. El tema, la máscara y el recurso ya son perfectos para separar el diseño y la lógica.
Viewstate: la administración de la identificación del cliente está llegando a ASP.NET 4.0. Solo me preocupan las pruebas unitarias, pero las pruebas unitarias no son suficientes como motivo para recurrir a ASP.NET MVC desde el formulario web.
Tal vez pueda decir: ASP.NET MVC no es malo, pero el formulario web ya es suficiente.
fuente
He estado usando MVC desde que salió la Vista previa 3 y, aunque todavía tiene sus dolores de crecimiento, ayuda bastante en el área del desarrollo del equipo. Intente que tres personas trabajen en una sola página de formularios web y luego comprenderá el concepto de golpearse la cabeza contra la pared. Puedo trabajar con un desarrollador que entienda los elementos de diseño en la página de vista y nuestro dios Linq residente para hacer que el modelo funcione mientras pongo todo junto en el controlador. Nunca he podido desarrollarme en un reino donde la separación de preocupaciones fuera tan fácil de lograr.
El mayor punto de venta de ASP.Net MVC: StackOverflow se ejecuta en la pila MVC.
Dicho esto ... su código es mucho más bonito que lo que normalmente hago con la página de vista. Además, uno de los tipos con los que trabajo está trabajando en envolver el ayudante HTML en una biblioteca de etiquetas. En lugar de <% = Html.RandomFunctionHere ()%> funciona como
<hh: función aleatoria />
Solo espero que el equipo de MVC lo logre en algún momento porque estoy seguro de que lo harían mejor.
fuente
Use un patrón de fachada para envolver toda la lógica de todos los datos que necesita mostrar y luego úselo como su genérico en su vista y luego ... no más código de espagueti. http://en.wikipedia.org/wiki/Design_pattern_(computer_science)
Si necesita más ayuda [email protected]
fuente
La implementación de ASP.NET MVC es horrible. El producto simplemente apesta. He visto varias demostraciones y estoy avergonzado de MSFT ... Estoy seguro de que los que lo escribieron son más inteligentes que yo, pero es casi como si no supieran qué es el Modelo-Vista-Controlador .
Las únicas personas que conozco que intentan implementar MVC son personas a las que les gusta probar cosas nuevas de MSFT. En las demostraciones que he visto, el presentador tenía un tono de disculpa ...
Soy un gran admirador de MSFT, pero tengo que decir que no veo ninguna razón para molestarme con su implementación de MVC. Utilice Web Forms o use jquery para el desarrollo web, no elija esta abominación.
EDITAR:
La intención del patrón de diseño arquitectónico Modelo-Vista-Controlador es separar su dominio de la presentación de las reglas de negocio. He utilizado el patrón con éxito en cada proyecto de Web Forms que he implementado. El producto ASP.NET MVC no se presta bien al patrón de diseño arquitectónico real.
fuente