¿Alguien a mi lado NO obtiene ASP.NET MVC? [cerrado]

141

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.

FlySwat
fuente
3
hombre que es un marcado feo!
Steven A. Lowe
39
¿Incluyes marcado CSS con tu HTML?
Todd Smith
12
Su formato apesta. Eso no es un problema inherente a MVC, es un signo de un mal programador HTML. Pienso que pasé demasiado tiempo en el patrón de observador. Aquí se requiere un poco más que arrastrar, soltar, hacer clic.
Chris
77
No importa MVC, llamar a Winforms "fácil de mantener" es una tontería. Es fácil de mantener siempre que no necesite ningún grado de control sobre la salida. Lo que significa que funciona bien siempre que sus usuarios solo usen navegadores web aprobados por MS.
jalf
2
¿Estoy haciendo algo mal? - Si. Pero no es tu culpa. Necesita escribir un buen HTML y luego agregarle la salida del Modelo. No necesitas respuesta ¡Escribe! La idea detrás del marco MVC es que hace las cosas mucho más limpias que .aspx, mientras que su ejemplo se parece más a ASP clásico.
Fenton

Respuestas:

152

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).

Mark Brittingham
fuente
32
-1, la pregunta original es buena: decir que no entiendes por qué algo es bueno y pedir más información es increíble. Sin embargo, esta respuesta es muy extraña: básicamente estás diciendo "Yo tampoco entiendo", pero resumiéndolo en una historia.
orip
49
Me parece interesante que su crítica a ASP.NET MVC es que agrega abstracción y sobrecarga. y por lo tanto es más complicado. Es precisamente lo contrario. Webforms agrega una capa de abstracción y MVC es mucho más directo y de bajo nivel que no te oculta de lo que estás haciendo
Trevor de Koekkoek
75
¿Por qué está marcado como "La respuesta" cuando el afiche ni siquiera sabía nada sobre el patrón MVC cuando respondió?
ScottKoon el
12
ScottKoon - estuvo de acuerdo, no estoy seguro de por qué esto fue aceptado. Parece que todo lo que hizo fue estar de acuerdo con el OP. -1
Jared
11
Estoy en desacuerdo con su caracterización de WebForms como mejor ajuste al paradigma web. WebForms es esencialmente el modelo WinForms basado en eventos superpuesto en la web. Como tal, el marco, y los desarrolladores si, Dios no lo quiera, intentamos hacer algo con herramientas del lado del cliente que no son de MS, tiene que saltar muchos obstáculos para fingir que está manejando eventos en la web . MVC es una opción muy natural para interfaces RESTful e REST intenta poner los protocolos web al uso para el que fueron diseñados. MS diseñó WebForms de la manera en que lo hicieron, no porque sea la mejor
opción
117

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 ...

  1. Más control sobre la página y los elementos dentro de la página.
  2. Menos "basura" en su salida, como ViewState o ID excesivamente largos en elementos (no me malinterpreten, me gusta ViewState)
  3. Mejor capacidad para hacer programación del lado del cliente con Javascript (¿Aplicaciones web 2.0 para alguien?)
  4. No solo MVC, sino que JsonResult es elegante ...

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!

Hugoware
fuente
10
Creo que los puntos 1 y 2 son el quid. Las formas web como una abstracción simplemente no "funcionan" en mi humilde opinión porque no es una abstracción que mapee bien lo que realmente está sucediendo. Creo que ASP.NET MVC es una abstracción más adecuada que los formularios web debido a mi experiencia limitada con MVC.
Daniel Auger
3
Y mucha gente usa ASP.Net sin tocar MVC o Webforms. He visto muchas aplicaciones .Net que evitan completamente el modelo de formularios web y simplemente hacen todo en el código detrás de la página. Y francamente, creo que funciona mejor.
Kibbee
Gracias por la actualización HBoss! Odiaría ver a MS abandonar WebForms después de pasar 7 años trabajando en ellos.
Mark Brittingham
1
Daniel: dices que Webforms no "funciona" porque no se asigna bien al modelo web. Respetuosamente no estoy de acuerdo: http se originó como un modelo para recuperar documentos . La arquitectura de Webforms simplemente amplía la idea de los documentos para que sean dinámicos. Esto funciona para mí ...
Mark Brittingham
3
@mdbritt. Respeto su opinión porque es cierta en un alto nivel de abstracción (recuperar un documento). Sin embargo, para mí, el modelo de psuedo y de devolución de datos es donde comienza a descomponerse, especialmente en escenarios muy dinámicos. Funciona muy bien para cosas simples, pero se deshace rápidamente.
Daniel Auger
76

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.

J Wynia
fuente
1
No sabía que podría intercambiar fácilmente en otros motores de vista, ¿puede proporcionar más información al respecto?
RedFilter
No tengo un enlace a mano, pero Phil Haack hizo un artículo hace un par de semanas en su sitio que muestra cómo incluso puedes ejecutarlos uno al lado del otro.
J Wynia
1
¡Amén! Odio usar Findcontrol. Lo odio mucho
Adam Lassek
3
Excelente, poste bien redondeado.
Owen
59
<% if (Model.PreviousPost || Model.NextPost) { %>
    <div class="pager">
        <% if (Model.PreviousPost) { %>
            <span><% Html.ActionLink("<< " + Model.PreviousPost.Subject, "view")); %></span>
        <% } if (Model.NextPost) { %>
            <span><% Html.ActionLink(Model.NextPost.Subject + " >>", "view")); %></span>
        <% } %>
    </div>
<% } %>

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

<% Html.RenderPartial("Pager", Model.PagerData) %>

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.

Todd Smith
fuente
44
Buen post. El OP se está perdiendo algunas de las técnicas, como la reutilización a través de RenderPartial, que haría que su código fuera más limpio. En defensa del OP, dio a entender que sentía que debía estar haciendo algo mal.
Daniel Auger
25

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.

Tom Anderson
fuente
66
No me importa el marcado de salida (hasta cierto punto), me importa el código mantenible. La compensación aquí de Webforms no vale la pena en mi humilde opinión.
FlySwat
1
Para explicarlo, nunca he tenido un problema con un buen marcado de Webforms, seguro de que tiene un campo ViewState, pero si tiene cuidado con su diseño, no obtendrá HTML roto.
FlySwat
2
Cuando vea un Viewstate de 2 MB, tendrá que realizar toneladas de búsqueda de controles para encontrar un control en un formulario web debido a la malformación de nombres de los elementos reales, algo que esta luz es bienvenida. Siempre he sido anal sobre mi código, cualquiera puede verlo en código fuente, y tengo TOC y quiero que mi casa esté limpia.
Tom Anderson
55
Solo obtienes un estado de visualización de 2 MB si no sabes lo que estás haciendo.
FlySwat
3
También obtienes sopa de etiquetas cuando no sabes lo que estás haciendo y arrojas código juntos ...
Hugoware
15

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.

 <%
    var PreviousPost = ViewData.Model.PreviousPost;
    var NextPost = ViewData.Model.NextPost;

    // Display the "Next and Previous" links
    if (PreviousPost != null || NextPost != null)
    {
  %>

 <div>

        <%= PreviousPost == null
                ? string.Empty
                : Html.ActionLinkSpan("<< " + PreviousPost.Subject,
                                "view",
                                new { id = PreviousPost.Id },
                                new { style = "float: left;" } ) %>
          <%= NextPost == null
                ? string.Empty
                : Html.ActionLinkSpan( NextPost.Subject + " >>",
                                   "view",
                                    new { id = NextPost.Id },
                                    new { style = "float: right;" } ) %>

  <div style="clear: both;" />
  </div>

  <% } %>
tvanfosson
fuente
2
¿Todavía no parece tan extraño, considerando que podría haber establecido la visibilidad de un <asp: hyperlink> en Webforms?
FlySwat
2
No, porque incluso los formularios web no serían tan simples. Probablemente tenga que establecer algunas propiedades en el hipervínculo en el código subyacente porque son dinámicas, aún necesitaría el código DIV / span, pero no podría convertirlo en un método. Y nada de eso sería comprobable.
tvanfosson
3
He hecho suficientes formularios web que el dolor de tratar con controles enlazados a datos y hacer que hagan lo que quiero del lado del cliente, junto con la capacidad de aumentar la cantidad de código probado al menos 2 veces me ha convencido. También he hecho lo suficiente en Rails para que esto no parezca extraño en absoluto.
tvanfosson
1
Tendría que configurar NavigateUrl y Visibility. Serían 2 líneas en el evento page_load.
FlySwat
2
Creo que es el hecho de que estabas haciendo esto en rieles. La última vez que hice esto fue ASP clásico, que tiene muchas otras razones para odiarlo. Quizás solo necesito superar mi repulsión inicial del reflejo nauseoso de las etiquetas <%%>.
FlySwat
14

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.

dkretz
fuente
1
Además de eso: hay una serie de motores de visualización disponibles que se conectan a MVC, incluidos los WebForms predeterminados, así como un puerto de HAML de RoR (que prohíbe los corchetes angulares, especialmente cuando incluyen signos de porcentaje).
yfeldblum
Una forma interesante de
decirlo
HAML FTW, especialmente si su única objeción a MVC es el <
%%
9

Las dos ventajas principales del marco ASP.NET MVC sobre los formularios web son:

  1. Capacidad de prueba: la interfaz de usuario y los eventos en formularios web son casi imposibles de probar. Con ASP.NET MVC, las acciones del controlador de pruebas unitarias y las vistas que representan son fáciles. Esto viene con un costo en el costo de desarrollo inicial, pero los estudios han demostrado que esto vale la pena a largo plazo cuando llega el momento de refactorizar y mantener la aplicación.
  2. Mejor control sobre el HTML renderizado : usted declara que no le importa el HTML renderizado porque nadie lo mira. Esa es una queja válida si esa fuera la única razón para tener un formato HTML correctamente. Existen numerosas razones para querer HTML correctamente formateado, que incluyen: SEO, la capacidad de usar selectores de id con más frecuencia (en css y javascript), huellas de página más pequeñas debido a la falta de estado de visualización e identificadores ridículamente largos (ctl00_etcetcetc).

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.

Kevin Pang
fuente
8

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.

Papa Borgoña
fuente
Me gustaría ver su implementación de paginación porque aún no tengo idea de cómo voy a abordarla :)
dtc
Aquí es donde obtuve los ayudantes de búsqueda. Puede descargar el proyecto de muestra aquí: blogs.taiga.nl/martijn/archive/2008/08/27/…
Papa Burgundy
Como con cualquier cosa, hay una curva de aprendizaje. Es posible que se sorprenda gratamente de lo mejor que es el trabajo de ciertas áreas. Sin embargo, no mentiré: algunos de los lujos como Server Controls y ViewState ciertamente se pierden. Escribí <asp: TextB ... y luego me di cuenta ... ¡Vaya!
Hugoware
Aquí hay una pregunta honesta. Si necesita clases de HTML "Helper", ¿realmente no ha violado el modelo MVC? ¿No estás dejando atrás la simplicidad y elegancia con que se vende? Si estoy equivocado (¡y puedo estarlo!) Por favor dime por qué.
Mark Brittingham
1
No creo que tenga que "cambiar" a MVC. Todavía uso WebForms según el proyecto.
Hugoware
8

Es gracioso porque eso es lo que dije la primera vez que vi formularios web.

Greg
fuente
En serio , realmente lo era. WebForms, sin conocer el contexto de los tiempos que nos lo trajeron, tiene poco sentido. No abarca la web, pero trata de ocultarlo, y es una abstracción muy pobre.
Jason Bunting
6

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.

dtc
fuente
6

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:

<span mvc:if="ViewData.Model.ShowPrevious" style="float: left;">
    <a mvc:inner="ViewData.Model.PreviousPost.Subject" href="view/{ViewData.Model.PreviousPost.Id}">sample previous subject</a>
</span> 
<span mvc:if="ViewData.Model.ShowNext" style="float: left;">
    <a mvc:inner="ViewData.Model.NextPost.Subject" href="view/{ViewData.Model.NextPost.Id}">sample next subject</a>
</span> 
<div mvc:if="ViewData.Model.ShowNextOrPrevious" style="clear: both;" />

Esto tiene varias ventajas:

  • Se ve mejor
  • mas conciso
  • sin cambio de contexto funky entre etiquetas HTML y <%%>
  • palabras clave fáciles de entender que se explican por sí mismas (incluso un no programador podría hacer esto, bueno para la paralelización)
  • tanta lógica regresó al controlador (o modelo) como sea posible
  • sin HTML generado; de nuevo, esto hace que sea muy fácil para alguien entrar y saber dónde diseñar algo, sin tener que perder el tiempo con Html. métodos
  • el código tiene texto de muestra que se representa cuando carga la vista como HTML sin formato en un navegador (nuevamente, bueno para la gente de diseño)

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

RedFilter
fuente
1
Podría implementar con bastante facilidad exactamente lo que está describiendo como su propio motor de visualización y deshacerse por completo de la solución de WebForms.
J Wynia
1
iba a hacer una nota de que hay otros motores de vista disponibles, y también creo que un marcado de estilo cf funcionaría bien, que es lo que estás mostrando aquí.
Rastreador1
Gracias por la información, no sabía que había otros motores de visualización.
RedFilter
Genshi es un popular motor de plantillas de Python con un enfoque similar, podría mirarlo para obtener más inspiración: genshi.edgewall.org/wiki/…
orip
Pero a nadie le gustaban los XSL, entonces, ¿cómo espera que se adopte esto?
BobbyShaftoe
4

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)

Kevin
fuente
3

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.

duffymo
fuente
+1 - más si pudiera darlo. Sí ... Java ha recorrido este camino hace mucho tiempo. La parte extraña es que Java también ha visto algunos marcos de estilo MVC que también se atornillan en componentes, como JSF y Tapestry. MVC es la única arquitectura sensata para una aplicación web en mi humilde opinión. No dejaría que la carne con el marco te impida obtener una comprensión más profunda del mismo. El marco evolucionará.
cwash el
3

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.

@{ 
    var prevPost = ViewData.Model.PreviousPost;
    var nextPost = ViewData.Model.NextPost;
}

@if (prevPost != null || nextPost != null) {
    <div>
        @if (prevPost != null) {
            <span style="float: left;">
                @Html.ActionLink("<< " + prevPost.Subject, "view", new { id = prevPost.Id })
            </span>
        }
        @if (nextPost != null) {
            <span style="float: left;">
                @Html.ActionLink(nextPost.Subject + " >>", "view", new { id = nextPost.Id })
            </span>
        }
        <div style="clear: both;" />
    </div>
}

¿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 divrara vez duele. Así es como lo haría:

<div>
    @if (prevPost != null) {
        @Html.ActionLink("<< " + prevPost.Subject, "view",
            new { id = prevPost.Id, @class = "prev-link" })
    }
    @if (nextPost != null) {
        @Html.ActionLink(nextPost.Subject + " >>", "view",
            new { id = nextPost.Id, @class = "next-link" })
    }
    <div class="clear" />
</div>
Dan Abramov
fuente
2

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

  1. Ofrecen una separación formal entre las operaciones de la base de datos, la "lógica de negocios" y la presentación.

  2. 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

Alan Storm
fuente
1
"confías en tu proveedor para que escriba tu HTML / CSS / Javascript por ti" Eso no tiene sentido. ¿Todos usan los controles preconstruidos? Nunca lo hemos hecho.
FlySwat
1
El punto 1 tampoco tiene sentido. Cada aplicación que he diseñado ha sido fuertemente separada, con solo el código detrás de ser una lógica vinculante para la vista. Los controladores de eventos en el código subyacente simplemente llamaron a los métodos apropiados en la capa empresarial.
FlySwat
1
Como dije Jon, si Webforms está funcionando para usted y su tienda tiene tiempo para desarrollar sus propios controles, continúe haciéndolo.
Alan Storm
1
@FlySwat: ¿NUNCA ha usado una DropDownList o DataGrid?
Simon_Weaver
2

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:

<if condition="myDtp.ShowPager">
  <div>
    <first />
    <last />
    <div style="clear: both;" />
  </div>
</if>

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 ...

rball
fuente
2

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.

public static string PostNavigator(this HtmlHelper html, Post previous, Post next, Func<int, string> pageUrl)
{
    StringBuilder result = new StringBuilder();

    if (previous != null || next != null)
    {
        result.Append("<div>");

        if (previous != null)
        {
            result.Append(@"<span class=""left"">");
            TagBuilder link = new TagBuilder("a");
            link.MergeAttribute("href", pageUrl(previous.Id));
            link.InnerHtml = String.Format("<< {0}", html.Encode(previous.Subject));
            result.Append(link.ToString());
            result.Append("</span>");
        }

        if (next != null)
        {
            if (previous != null)
            {
                result.Append(" ");
            }

            result.Append(@"<span class=""right"">");
            TagBuilder link = new TagBuilder("a");
            link.MergeAttribute("href", pageUrl(next.Id));
            link.InnerHtml = String.Format("{0} >>", html.Encode(next.Subject));
            result.Append(link.ToString());
            result.Append("</span>");
        }

        result.Append("</div>");
    }

    return result.ToString();
}

En su opinión, lo llamaría con un código como este:

<%= Html.PostNavigator(ViewData.Model.PreviousPost, ViewData.Model.NextPost, id => Url.Action("View", new { postId = id })) %>

[1] http://blog.codeville.net/2009/04/29/now-published-pro-aspnet-mvc-framework-apress/

[2] http://books.google.com/books?id=Xb3a1xTSfZgC


fuente
2
Wow, eso es un marcado horrible en el código ... Bleck.
FlySwat
Si un 'PostNavigator' es un widget reutilizable (o WebControl si lo desea) con un marcado que no cambia, y que está diseñado por las reglas CSS, ¿cómo es esa una solución tan horrible?
@GuyIncognito: De acuerdo, esto parece análogo a un WebControl y una solución limpia. En algún momento, debe generar un montón de cadenas HTML. Un método de extensión como este es una buena solución.
gbc el
1

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

Haacked - 23 de abril de 2009 - ¡Rob, eres un motín! :) Me parece divertido cuando la gente escribe código de espagueti en MVC y luego dice "¡mira! ¡Espagueti!" ¡Hola, también puedo escribir código de espagueti en formularios web! Puedo escribirlo en rails, PHP, Java, Javascript, pero no en Lisp. Pero solo porque todavía no puedo escribir nada en Lisp. Y cuando escribo código de espagueti no miro mi plato con tristeza esperando ver macarrones. El punto que la gente suele hacer al compararlo con ASP clásico es que con ASP clásico las personas tienden a mezclar preocupaciones. Las páginas tendrían vista lógica con manejo de entrada de usuario mezclado con código de modelo y lógica de negocios todo mezclado en uno. ¡De eso se trataban los espaguetis! Mezcla de preocupaciones todo en un gran desastre. Con ASP.NET MVC, si sigue el patrón, es menos probable que lo haga. Si, es posible que todavía tenga un poco de código en su vista, pero con suerte eso es todo código de vista. El patrón lo alienta a no poner su código de interacción de usuario allí. Ponlo en el controlador. Pon tu código de modelo en una clase de modelo. Ahí. No hay espagueti. Es O-Toro Sushi ahora. :)

Sameer Alibhai
fuente
1

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:

  1. Prueba de unidad)
  2. Separe el diseño (vista) y la lógica (controlador + modelo)
  3. Sin estado de vista y mejor gestión de identificación de elementos
  4. URL RESTful y más ...

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.

Cheung
fuente
-1

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.

thaBadDawg
fuente
1
"... uno de los chicos con los que trabajo está trabajando en envolver el ayudante HTML en una biblioteca de etiquetas. En lugar de <% = Html.RandomFunctionHere ()%> funciona como <hh: randomfunction />" Eso es todo: un llamar al método "RandomFunctionHere ()" es solo eso: una llamada al método. No es un marcado, y abstraer ese hecho en algo que parece una etiqueta me parece estar perdiendo el punto. Si soy un desarrollador que está mirando ese código, preferiría verlo como un método que como una etiqueta personalizada ...
Jason Bunting
-17

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.

mson
fuente
3
Dependiendo del sitio, MVC es una herramienta muy poderosa lista para usar sin mucho trabajo extra. Para mí, lo estoy usando solo para recuperar el control de mi marcado, la abominación que los formularios web pueden hacer al marcado de un sitio web simple es simplemente ... una locura.
Tom Anderson
Apostaría a decir que MVC es en realidad bastante bueno, ya que es estar en forma en el molde de ASP.NET, que está orientado a favorecer WebForms ...
Hugoware
@tom: si tiene que presentar un comentario positivo sobre algo con ... Dependiendo del sitio ... ya está parado sobre hielo delgado. Estoy de acuerdo en que si el requisito es desarrollar un sitio usando ASP.NET MVC, puede ser una buena opción, pero para cualquier otra cosa, parece una mala elección.
mson
44
Me gusta y prefiero el chocolate a la vainilla. ¿Alguien quiere discutir conmigo al respecto?
Jason Bunting
44
@ Jason CHOCOLATE ES HORRIBLE. El producto simplemente apesta ... ¿yu me has votado mal?