Spring MVC vs Struts

Iñaki acaba de pasarme un artículo que me ha llamado la atención, se trata de un artículo que comenta las ventajas de utilizar Spring MVC frente a utilizar Struts. Es normal que Struts tenga fallos de diseño ya que es un proyecto que lleva mucho más tiempo en el mercado que Spring MVC, recordemos que Struts fue el primer framework MVC que apareció. De una u otra manera los creadores de Spring se han valido de la experiencia adquirida al utilizar Struts para no cometer los mismos errores al diseñar Spring MVC.

Las ventajas que enumera el autor son las siguientes:

  1. Spring MVC ofrece una división limpia entre Controllers, Models (JavaBeans) y Views.
  2. Spring MVC es muy flexible, ya que implementa toda su estructura mediante interfaces no como Struts que obliga a heredar de clases concretas tanto en sus Actions como en sus Forms. Además, todas las partes del framework son configurables via pluggin en la interface, aunque Spring provee clases concretas como opción de implementación.
  3. Spring MVC provee interceptores también como controllers que permiten factorizar el comportamiento común en el manejo de múltiples requests.
  4. Spring MVC no obliga a utilizar JSP, permite utilizar XLST,Velocity o implemtar tu propio lenguaje para integrarlo en la View de la aplicación.
  5. Los controllers de Spring MVC se configuran mediante IoC como los demás objetos, lo cual los hace fácilmente testeables e integrables con otros objetos que estén en el contexto de Spring, y por tanto sean manejables por éste.
  6. Las partes de Spring MVC son más fácilmente testeables que las de Struts, debido a que evita la herencia de una clase de manera forzosa y una dependencia directa en el controller del servlet que despacha las peticiones.
  7. La capa Web de Spring es una pequeña parte en lo alto de la capa de negocio de Spring, lo cual parece una buena práctica. Struts y otros frameworks web dejan a tu elección la implementación de los objetos de negocio, mientras que Spring ofrece un framework para todas las capas de la aplicación.
  8. No existen ActionForms se enlaza directamente con los beans de negocio.
  9. Más cantidad de código testeable, las validaciones no dependen de la Api de servlets.
  10. Struts obliga a extender la clase Action, mientras que Spring MVC no, aunque proporciona una serie de implementaciones de Controllers para que el usuario los utilice.
  11. Spring tiene una interfaz bien definida para la capa de negocio.
  12. Spring ofrece mejor integración con tecnologías distintas a JSP, como Velocity,XSLT,FreeMaker y XL.

No he programado mucho con Spring MVC, así que desconozco si todo lo que dice el autor es verdad pero a priori no puedo desconfiar, reconozco que la mayoría de las críticas que se le hacen a Struts son ciertas, yo programo todos los días con Struts y me parece que el diseño de Spring MVC es más limpio que el de Struts. A lo mejor alguna de estas afirmaciónes es un poco exagerada, pero en general, estoy de acuerdo.

¿Qué opinaís vosotros?

Me gustaría que la gente que haya programado con los 2 frameworks de su opinión, más que nada por si tengo que decantarme entre seguir con Struts o cambiar en el futuro, pueda hacerlo por razones de peso.

Os dejo el link del artículo original para que le echeís un vistazo, por si me he colado en la traducción o queréis ahondar más.

http://lijinjoseji.wordpress.com/2006/11/10/12-benefits-of-spring-mvc-over-struts/

12 Comentarios

  • 1. Joserra  |  Octubre 3rd, 2007 at 7:48 am

    La comparación con Struts 1.X es odiosa para todos los que lo usamos :) ¿pero que hay de la versión 2 de Struts? Parece que es mucho más “moderna” en cuanto al uso de POJO, interfaces,…
    Otra cosa que no comparan entre Spring MVC y Struts 1.X es el rendimiento. Me gustaría saber si sabes de alguna comparativa. Apostaría por Struts…

    Para mi ahora el principal problema de Struts 1.X, (integrado con Spring además para el IoC y la capa de servicios) es floja velocidad de desarrollo que se obtiene por las nuemrosas clases y ficheros de config a implementar. También estoy pensando con qué sustituirlo en nuestros proyectos, pero a pesar de sus defectos, tiene una gran virtud: sus millones de horas de testeo y que sabes que funciona y escala muy bien.

  • 2. Raúl Vicente  |  Octubre 3rd, 2007 at 8:27 am

    Buenas Joserra,
    yo también programo con Struts 1.X y no se nada de Struts 2 ya que a todo no llego, espero que hayan arregalado muchos de los fallos de la primera versión, pero no puedo asegurar nada.

    Ahora que lo dices no he visto ninguna comparativa de rendimientos, en cuanto al tema de los ficheros de configuración, yo llevo clamando por que se adopten las Conventions como en Ruby on Rails desde hace mucho, pero nada, nadie me escucha.

    Spring MVC, permite eliminar la navegación del XML lo cual es un avance, pero no llega al nivel de Ruby.

    Yo creo que deberían hacer algo con annotations (más de lo que está hecho)que pudiera eliminar el fichero de configuración de Spring, y para aquellos que utilicen una JDK menor a la 1.5, dejar abierta la posibilidad del fichero XML.

    Gracias.

  • 3. Mr Oakgrove  |  Octubre 3rd, 2007 at 10:08 am

    Hola,

    Yo no he utilizado Spring MVC. Pero si que he utilizado Struts. En su versión 1.x y actualmente en su versión 2.x. Por lo que veo en esta comparativa comparan Spring con Struts 1.x. Ya que Struts 2.x soluciona muchas de estas diferencias. Echale un vistazo a Struts2 que esta basado en WebWorks (otro framework), eso si aún es un producto para mi gusto no lo suficiente maduro por lo que tiene algunos bugs y ademas la documentación deja bastante que desear.

    Salu2,

  • 4. Raúl Vicente  |  Octubre 3rd, 2007 at 10:34 am

    Buenas Mr Oakgrove,
    en el artículo original que dió lugar a este post también nombran WebWork, ya que Spring MVC incorpora alguna de las ideas de este framework, pero como no tengo ni idea de cómo va lo he evitado, por si acaso me equivocaba en alguna de las afirmaciones.

    Intentaré echarle un vistazo a Struts 2.0 ya que comentas que soluciona muchos de estos bugs.

    ¿por qué será que en Java siempre tengo la impresión de que no abarco? salen frameworks día sí y día no.

    Gracias por colaborar.

  • 5. Básico  |  Octubre 24th, 2007 at 8:50 pm

    Saludos,

    Yo he usado Struts 1.2 y creo que es bastante bueno a pesar de las miles de críticas que siempre se le hacen. Aún no he usado Spring, pero estoy por entrar en el asunto. El problema con los frameworks es que nunca, nunca se adaptarán un 100% a las necesidades de desarrollo de cada aplicación. Los frameworks nos dan muchas facilidades, pero tampoco son milagrosos.

    En lo que pueda revisaré Struts 2 (que según he leído NO es la nueva versión de Struts, sino una nueva implementación) y también revisaré Spring.

    PD: Hay algo llamado “Stripes” del cual también se habla hoy en día. No lo conozco todavía.

  • 6. Master  |  Febrero 8th, 2008 at 8:55 pm

    Efectivamente ambos frameworks son eficientes, dependiendo del uso que se les de a ellos, yo he utilizado ambos y lo único que considero es que ambos sirven y son igual de efectivos, lo importante es saberlos utilizar

  • 7. luis strumer  |  Mayo 26th, 2008 at 5:29 pm

    Hola amigos,

    Me gustaría saber si existe un plugin para trabajar con jquery y struts 2.0

  • 8. Raul Vicente  |  Mayo 27th, 2008 at 9:45 am

    Buenas Luis, no tengo ni idea no he trabajado con jquery nunca, no obstante si me entero de algo no dudaré en postearlo.

    Muchas gracias.

  • 9. CaesarMC  |  Mayo 28th, 2008 at 6:29 pm

    Estoy empezando con este dilema de struts y spring, en mi caso surgió por encontrar algo que me facilite más el trabajo con interfaces AJAX. ¿Cual sería vuestra recomendación en ese caso? creo que Spring ofrece muchas más alternativas en la VISTA y podría ser una mejor opción de cara a desarrollar para estos interfaces WEB 2.0 que sin duda serán el futuro de la web.

  • 10. Raul Vicente  |  Mayo 29th, 2008 at 12:17 pm

    Si lo que quieres es programarte toda la lógica Ajax tú, Spring a lo mejor te facilita más la cosa (yo la verdad, no he desarrollado nada serio con él así que no puedo asegurarlo rotundamente), no obstante, si lo que quieres es utilizar una librería Ajax para Java como Ajax4Jsf la mayoría de las opciones en este campo se han programado para JSF. Esa es mi experiencia si encuentras una librería para Spring MVC me gustaría saber de ella, a sí que si fueras tan amable de postear la dirección donde se habla de ella te lo agradecería mucho.

    Muchas Gracias.

  • 11. Cancamusa  |  Julio 21st, 2008 at 7:06 am

    He estado revisando las nuevas funcionalidades y creo que se corrigen la mayoría de críticas que se le hacen, aparte de que se ha fusionado con WebWork. Entre lo que he estado viendo, ya permite conectar directamente con la lógica de negocio, sin pasar por el ActionForm.
    Un saludo.

  • 12. Enrique  |  Mayo 6th, 2009 at 3:44 pm

    Ha pasado casi un año desde el último post en este hilo, y quería saber si las apreciaciones de la gente han cambiado. Yo, personalmente, opino que el Struts 2 está cogido por los pelos, aunque en las últimas versiones hayan arreglado muchos de los fallos.

    Estoy en casa probando el Spring MVC. Ya comentaré cuando lo vea más claro.

Comenta el articulo:

Requerido

Requerido,