2009-06-02 11 views
8

Ich bin ein begeisterter Fan des Spring-Framework für Java (von Rod Johnson). Ich lerne Python und war gespannt auf Spring for Python. Ich würde die Ansichten der Gemeinschaft über den Vergleich von diese beiden Aromen von Spring hören. Wie gut passt es Python-Paradigmen etc.Wie vergleicht Spring für Python mit Spring für Java

Antwort

12

OFFENLEGUNG: Ich bin der Projektleiter für den Frühling Python, so dass Sie meine Meinung voreingenommen betrachten.

Ich finde, dass mehrere der von Spring Python bereitgestellten Optionen nützlich sind, einschließlich: aspect oriented programming, dependency injection, remoting, security, and easy database access.

Aspektorientierte Programmierung ist, wie man sagt, einfacher mit Python als Java zu implementieren. Aber Spring Python macht es einfach, vorhandenen Python-Modulen hinzuzufügen, ohne ihren Quellcode zu bearbeiten. Die anderen Lösungen erfordern Meta-Programmierung oder Änderung des ursprünglichen Quellcodes. Ich hatte bereits eine Person, die unsere Foren besucht und gefragt hat, wie man einen Interceptor zu einer PyGame-Anwendung hinzufügen kann, damit er unauffällig etwas Code "antippen" kann.

Viele Leute schnell assume "dependency injection" or "IoC" instantly means "XML configuration files". Nicht der Fall. Während wir eine XML-Konfiguration unterstützen, springen Sie direkt in die Verwendung von Python-Dekoratoren.

Ich kenne bereits eine Firma, die Spring Python als Schlüsselelement ihres Systems verwendet. Sie sind daran interessiert, Verbesserungen vorzunehmen, neue Funktionen hinzuzufügen und sie generell als Teil ihrer Lösung zu verwenden. Sie haben auch damit experimentiert, es in Jython laufen zu lassen, falls das Ihr Interesse weckt.

Am Ende des Tages, mein Vorschlag ist es, alle Funktionen zu untersuchen, und sehen, ob einige von ihnen Ihren Bedürfnissen entsprechen. Ob es sich dabei um unnötige Komplexität oder um Wertsteigerung handelt, kann nur von Ihnen bestimmt werden. Sie müssen nicht alles verwenden; nur was du brauchst. Um mehr Informationen über das, was verfügbar ist, zu erhalten, lade ich Sie ein, die Introduction to Spring Python, die ich auf der SpringOne Americas 2008 Konferenz vorgestellt.

+0

Die Einführung in Spring Python Link ist gebrochen. Fordern Sie einen aktuellen Live-Link – gansub

+0

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

+0

Nebenbei gibt es auch ein Buch => https://www.packtpub.com/application -Entwicklung/Frühling-Python-11 – gregturn

22

Dependency-Injection-Frameworks sind nicht annähernd so nützlich in einer dynamisch typisierten Sprache. Siehe zum Beispiel die Präsentation Dependency Injection: Vitally important or totally irrelevant? In Java ist die Flexibilität, die von einem Framework zur Abhängigkeitsinjektion bereitgestellt wird, von entscheidender Bedeutung, während es in Python normalerweise zu unnötiger Komplexität führt.

Dies bedeutet nicht, dass die Prinzipien falsch sind. Sehen Sie dieses Beispiel, wie lose Kopplung zwischen den Klassen zu erreichen, indem einfach Idiome mit:

# 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 Jahre später ... :) Wie würden Sie geschachtelte Abhängigkeiten handhaben? A (b (c (d)))? Wie würden Sie mit unbekannter Anzahl von Abhängigkeiten umgehen, ohne noch einen weiteren Parameter im Konstruktor hinzuzufügen? – dakt

0

Gute Sachen. Ich habe Spring Java, Spring Dot Net und jetzt mit Spring Python verwendet. Python war schon immer ziemlich einfach für Programmierer zu verwenden; Ich denke, vor allem, weil es einfach zu schreiben ist. Ich fand Spring Dot Net etwas verwirrend, aber Spring Java und Python scheinen ähnlich zu sein. Ich bin mir sicher, dass sie ihre Unterschiede haben, aber zumindest bin ich nicht alle so verwirrt mit der Python-Implementierung von Spring.

Verwandte Themen