¿Cómo se maneja Ruby, Python, PHP sin Spring?


13

Escribo aplicaciones Java empresariales y servicios web en el trabajo ( Spring , Hibernate, Maven, RESTEasy) y PHP (CakePHP) y Python (Django) para mis proyectos paralelos.

Si bien veo el valor que aporta la Inversión de control, la Programación orientada a aspectos, etc., que Spring aporta, no estoy seguro de cómo las aplicaciones web masivas que no están en la pila de Java se gestionan sin un marco como Spring.

Entonces, ¿los desarrolladores solo tienen que "soportar" componentes estrechamente acoplados y otras quejas que Spring elimina o me falta algo?

Para aquellos que no están familiarizados con Spring, las características que más utilizamos son:

  • Inversión del contenedor de control: configuración de componentes de la aplicación y gestión del ciclo de vida de objetos Java,

  • Programación orientada a aspectos: permite la implementación de rutinas transversales,

  • Gestión de transacciones: unifica varias API de gestión de transacciones y coordina transacciones para objetos Java.


3
Probablemente obtendrá mejores respuestas si al menos explica brevemente lo que hace Spring.
Por Johansson el

44
El hecho de que los Pythonistas no utilicen las palabras de moda de Java no significa que los patrones de diseño sean significativamente diferentes. Bueno, tal vez excepto la pérdida menos hinchazón.
vartec

66
Incluso con tu definición, todavía no tengo ni idea de lo que hace Spring.
sevenseacat

Y esa es una de las mayores quejas que tengo con Spring. Antes de comenzar a hacer desarrollo empresarial Java, no lo necesitaba.
rdasxy

Soy un desarrollador de Java, pero realmente no me gusta la primavera por su complejidad.
Mahmoud Hossam

Respuestas:


15

Otras plataformas no necesitan Spring porque esos lenguajes no son tan restrictivos como Java.

Daré un ejemplo con node.js

  • Inversión del contenedor de control: configuración de componentes de la aplicación y gestión del ciclo de vida de objetos Java

la configuración del servidor se realiza en código o en un simple archivo de configuración json. En cuanto a los sistemas genéricos de IoC, simplemente no los necesitamos, Javascript es un lenguaje expresivo y dinámico. Sí, necesita IoC, pero eso es simple, pasar dependencias a sus objetos como parámetros de función.

  • Programación orientada a aspectos: permite la implementación de rutinas transversales

Simplemente no creo que necesitemos algo como esto, escribimos código modular y simplemente funciona.

  • Gestión de transacciones: unifica varias API de gestión de transacciones y coordina transacciones para objetos Java

noSQL es increíblemente popular. No hay noción de transacción.

Personalmente, diría que tales sistemas están hinchados y sobre diseñados y simplemente no los necesita. Otros lenguajes y plataformas simplemente se mantienen delgados y ágiles.


8
También se ha perdido lo simple que es usar la escritura de pato y el parche de mono para inyectar cosas en Python y Ruby.
Danny Staple, el

3
Correcto, la razón por la que otros idiomas no tienen Spring es porque ... no necesitan Spring para ser realmente útiles ;-)
Dean Harding

77
Decir que no necesita IoC, AOP o gestión transaccional es miope e incorrecto. Muchos lenguajes de alto nivel le permiten escribir código fácilmente utilizando los principios de diseño de AOP y / o IoC. Es solo que la mayoría de los lenguajes de alto nivel no necesitan una clase o contenedor explícito para proporcionar esas capacidades.
dietbuddha

2
@Raynos En cuanto a los sistemas genéricos de IoC, simplemente no los necesitamos, javascript es un lenguaje expresivo y dinámico. Esto es desinformación hasta cierto punto. No crees que los necesitas. coffeescripter.com/2010/08/…
Aaron McIver

44
@AaronMcSi tenías razón, necesitamos IoC.
Raynos

15

En la mayoría de los lenguajes de alto nivel es trivial escribir usando los principios de diseño de AOP y / o IoC.

Todo lo que necesita para implementar AOP es que el lenguaje admita funciones de orden superior. Por ejemplo:

def log(fn):
  def wrapped_fn(*a, **kw):
    logger.log(fn_formatter(fn, a, kw))
    return fn(*a, **kw)
  return wrapped_fn

@log
def do_something(my_friend):
  return have_fun_with(my_friend)

También puede seguir los principios generales de IoC o Inyección de dependencias al programar. No necesita un contenedor particular para proporcionar esa capacidad. Puedes escribir el código de esa manera.

def etl(iextract, transformations, iload):
  return iload(itertools.imap(compose(*transformations), iextract()))

9

Bueno, Python disfruta de Spring también Spring Python .

Spring Framework fue creado para facilitar el desarrollo de Java y lo que es cierto para el desarrollo de Java no es necesariamente cierto para el desarrollo de Ruby o Python.

Ruby, por ejemplo, tiene capacidades de metaprogramación, lo que significa que puede crear su propio AOP.

Irónicamente, sin embargo, los nuevos marcos web Java están tratando de atrapar los marcos Django y Rails (ver los marcos Grails y Play! Por ejemplo).


44
Grails no es un marco de Java. Es un marco Groovy. Groovy compila el código de bytes de Java, pero no es Java.
Kevin Cline

@kevincline Sí, lo sabía, pero al final del día es un marco web JVM (construido en Spring e Hibernate).
Quirón

1
Sí, lo mejor de Grails es que no tienes que saber Spring.
Kevin Cline

1
@kevincline No necesariamente es cierto. A veces tienes que recurrir a la primavera y modificar las cosas aquí y allá
Chiron

3

Para Python, BlueBream (también conocido como Zope 3) proporciona lo que hace Spring y más.

La complejidad y el poder tienen un costo, hay momentos en que no desea pagarlo.

Muchos programadores encuentran que BlueBream es desalentador y demasiado para lo que necesitan hacer, prefieren kits de herramientas más delgados y pequeños. La mayoría de las otras soluciones (Django, etc.) se basan en el paradigma MVC.

También puede ver fuerzas similares en acción en el espacio Java, con cosas como el hermoso Playframework .

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.