2009-06-02 19 views
8

Soy un ávido admirador del framework Spring para Java (por Rod Johnson). Estoy aprendiendo Python y estaba entusiasmado de encontrar sobre Spring for Python. Me gustaría escuchar los puntos de vista de la comunidad sobre la comparación de estos dos sabores de Spring. Qué tan bien se ajusta a los paradigmas de Python, etc.¿Cómo se compara Spring para Python con Spring para Java?

Respuesta

12

DIVULGACIÓN: yo soy el líder del proyecto para la primavera de Python, por lo que se puede considerar mi opinión sesgada.

Encuentro que varias de las opciones proporcionadas por Spring Python son útiles, incluyendo: aspect oriented programming, dependency injection, remoting, security, and easy database access.

La programación orientada a aspectos es, como dicen, más fácil de implementar fuera del manguito con python que java. Pero Spring Python hace que sea bastante fácil de agregar a los módulos de python existentes sin editar su código fuente. Las otras soluciones requieren meta-programación o modificación del código fuente original. Ya he tenido una persona que visita nuestros foros y pregunta cómo agregar un interceptor a una aplicación PyGame, para que pueda "tocar" discretamente algún código.

Mucha gente rápidamente assume "dependency injection" or "IoC" instantly means "XML configuration files". No es el caso. Si bien admitimos una configuración XML, solo ingrese directamente en el uso de decoradores de Python.

Ya conozco una empresa que está utilizando Spring Python como una pieza clave de su sistema. Están interesados ​​en hacer mejoras, agregar nuevas características y, en general, utilizarlo como parte de su solución. También han experimentado con ejecutarlo dentro de jython, en caso de que despierte su interés.

Al final del día, mi sugerencia es examinar todas las características y ver si alguna de ellas se adapta a sus necesidades. Si usted está agregando complejidad innecesaria o un valor succint solo puede ser determinado por usted. No tienes que usar todo; solo lo que necesitas Para obtener más información sobre lo que está disponible, lo invito a ver Introduction to Spring Python, que presenté en la conferencia SpringOne Americas 2008.

+0

el enlace Introducción a Spring Python está roto. Solicitar agregar un último enlace en vivo – gansub

+0

https://www.slideshare.net/gturnquist/intro-to-spring-python – gregturn

+0

Por cierto, también hay un libro => https://www.packtpub.com/application -development/spring-python-11 – gregturn

22

Los marcos de inyección de dependencias no son tan útiles en un lenguaje de tipado dinámico. Véase, por ejemplo, la presentación Dependency Injection: Vitally important or totally irrelevant?. En Java, la flexibilidad proporcionada por un marco de inyección de dependencias es vital, mientras que en Python generalmente resulta en una complejidad innecesaria.

Esto no significa que los principios sean incorrectos. Vea este ejemplo de cómo lograr la articulación flexible entre las clases mediante el uso de frases hechas sencillas:

# A concrete class implementing the greeting provider interface 
class EnglishGreetingProvider(object): 
    def get_greeting(self, who): 
     return "Hello %s!" % who 

# A class that takes a greeting provider factory as a parameter 
class ConsoleGreeter(object): 
    def __init__(self, who, provider=EnglishGreetingProvider): 
     self.who = who 
     self.provider = provider() 
    def greet(self): 
     print(self.provider.get_greeting(self.who)) 

# Default wiring 
greeter = ConsoleGreeter(who="World") 
greeter.greet() 

# Alternative implementation 
class FrenchGreetingProvider(object): 
    def get_greeting(self, who): 
     return "Bonjour %s!" % who 
greeter = ConsoleGreeter(who="World", provider=FrenchGreetingProvider) 
greeter.greet() 
+0

6 años después ... :) ¿Cómo manejarías las dependencias anidadas a (b (c (d)))? ¿Cómo manejarías un número desconocido de dependencias sin agregar otro parámetro en el constructor? – dakt

0

Buenas cosas. He utilizado Spring Java, Spring Dot Net y ahora estoy comenzando con Spring Python. Python siempre ha sido muy fácil de usar para los programadores; Creo, especialmente porque es fácil de escribir. Creo que Spring Dot Net es un poco confuso, pero tanto Spring Java como Python parecen ser similares. Estoy seguro de que tienen sus diferencias, pero hasta ahora, al menos, no estoy tan confundido con la implementación de Python de Spring.

Cuestiones relacionadas