Seite 1 von 1
BeanFactory für Python
Verfasst: Samstag 24. Januar 2009, 10:40
von DatenMetzgerX
Hallo zusammen
Die BeanFactory aus Spring (oder wie es sie auch bei verschiedenen EJB Frameworks vorhanden ist) scheint mir sehr interessant. Vorallem aus dem Grund, dass ich angeben kann, welcher Service welche Klasse verwenden soll und dies ohne eine Zeile Code!
Gibt es sowas für Python?
Merci vielmals =)
Verfasst: Samstag 24. Januar 2009, 10:56
von Darii
Glaub nicht, sowas ist in Python ja auch ziemlich trivial zu lösen.
Python ist kein Java trifft es da glaube ich ganz gut.
Re: BeanFactory für Python
Verfasst: Samstag 24. Januar 2009, 13:09
von Leonidas
DatenMetzgerX hat geschrieben:Die BeanFactory aus Spring (oder wie es sie auch bei verschiedenen EJB Frameworks vorhanden ist) scheint mir sehr interessant. Vorallem aus dem Grund, dass ich angeben kann, welcher Service welche Klasse verwenden soll und dies ohne eine Zeile Code!
Definiere "Service" so, dass Leute die EJB nicht kennen auch verstehen was du dir eigentlich wünscht. Mich würde auch interessieren wie du die Zuordnung angibst ohne eine Zeile Code zu schreiben (Klicken in einer GUI? Gedankenlesen über JTCS*?).
* Java Thought Control Standard
Re: BeanFactory für Python
Verfasst: Samstag 24. Januar 2009, 13:50
von Hyperion
Leonidas hat geschrieben: Gedankenlesen über JTCS*?).
* Java Thought Control Standard
LOL ... you made my day

Re: BeanFactory für Python
Verfasst: Sonntag 25. Januar 2009, 10:50
von sma
DatenMetzgerX hat geschrieben:Gibt es sowas für Python?
Meines Wissens nicht. DI und IoC sind in einer dynamischen Programmiersprache nur sehr begrenzt sinnvoll. Es ist hier ja genauso einfach eine Programmdatei zu ändern wie eine XML-Datei.
Ich hatte vor einigen Wochen ~10 Zeilen Python-Code gepostet, die einem Spring-Context entsprechen, doch ich finde das gerade einfach nicht wieder. Man kann sich das jedenfalls so einfach selbst bauen, dass es da wenig Grund für ein großes Rahmenwerk a la Spring gibt.
Stefan
Verfasst: Sonntag 25. Januar 2009, 12:26
von helduel
Moin,
es gibt ja Spring auch für Python (wahrscheinlich nicht alles, was Java-Spring bietet). Hast du dir das mal angeschaut?
Gruß,
Manuel
Verfasst: Sonntag 25. Januar 2009, 13:32
von DatenMetzgerX
Hier ist der Nutzen, wie auch was es ist, beschrieben
http://springpython.webfactional.com/re ... jects.html
Werde mir nun mal den IoC Teil vom Spring python ansehen, scheint das gewünschte zu sein =)
Dankschön euch allen.
Verfasst: Sonntag 25. Januar 2009, 17:41
von Leonidas
Also ich sehe da eine recht umständliche API zur Lösung eines Problemes, dass ich in Python gar nicht sehe. Achja, und natürlich ein Haufen XML dazu.
Kannst du mal so ein Python-Beispiel bringen, wo man DI bräuchte und wo das nicht mit Bordmitteln machbar ist?
Verfasst: Sonntag 25. Januar 2009, 18:16
von sma
Mein erster Gedanke? Ohgottohgottohgott.
Das XML-Beispiel in 2.2.1:
Code: Alles auswählen
<?xml version="1.0" encoding="UTF-8"?>
<objects xmlns="http://www.springframework.org/springpython/schema/objects"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/springpython/schema/objects
http://springpython.webfactional.com/schema/context/spring-python-context-1.0.xsd">
<object id="MovieLister" class="springpythontest.support.testSupportClasses.MovieLister" scope="prototype">
<property name="finder" ref="MovieFinder"/>
<property name="description"><ref object="SingletonString"/></property>
</object>
<object id="MovieFinder" class="springpythontest.support.testSupportClasses.ColonMovieFinder" scope="singleton">
<property name="filename"><value>support/movies1.txt</value></property>
</object>
<object id="SingletonString" class="springpythontest.support.testSupportClasses.StringHolder">
<property name="str" value="There should only be one copy of this string"></property>
</object>
</objects>
Wäre in Python:
Code: Alles auswählen
from springpythontest.support.testSupportClasses import MovieLister, ColonMovieFinder
movieLister = MovieLister()
movieFinder = ColonMovieFinder()
movieLister.finder = movieFinder
movieLister.description = "There should... Fuck. No. Who cares?! Strings are immutable!"
movieFinder.filename = "support/movies1.txt"
Und das Überfliegen des Artikels hat mich nicht überzeugt, dass der XML-Schrott einen Vorteil gegenüber dem kleinen Abschnitt Python-Code ist.
Will man es deklarativ machen, kann man immer noch Python benutzen:
Code: Alles auswählen
context = Context(
'movieLister': {
'class': 'springpythontest.support.testSupportClasses.MovieLister',
'finder': Ref('movieFinder'),
'description': "...",
},
'movieFinder': {
'class': 'springpythontest.support.testSupportClasses.ColonMovieFinder',
'filename': "support/movies1.txt",
},
)
Die Implementierung von `Context` und `Ref` benötigt nur wenige Zeilen. Erst wenn man Springs Magie nutzen möchte, Objekte automatisch mit Exemplaren von Objekten basierend auf den Typen von setter-Methoden zu bestücken, müsste man mehr machen. Das hat sich aber zumindest bei unseren Spring-basierten Java-Projekten nicht bewährt und explizites Definieren aller Abhängigkeiten war letztlich verständlicher.
Ich empfehle auch noch einen Blick auf
http://onestepback.org/articles/depinj/index.html und - auch wenn es um Ruby geht und nicht um Python - auf
http://rubyconf2008.confreaks.com/recov ... prise.html (da gibt es übrigens noch ein Dutzend weitere empfehlenswerte Präsentationen, "The Ruby Code Review. A Play in Three Acts" war z.B. sehr amüsant und dennoch so wahr...)
Stefan
Verfasst: Sonntag 25. Januar 2009, 18:40
von Leonidas
sma hat geschrieben:(da gibt es übrigens noch ein Dutzend weitere empfehlenswerte Präsentationen, "The Ruby Code Review. A Play in Three Acts" war z.B. sehr amüsant und dennoch so wahr...)
Ich lade die grad runter (und hoffe auf etwas ähnliches wie den letzten Talk von Zed Shaw). Auch wenn das etwas Offtopic ist: kannst du da noch weitere empfehlen? Da gibt es mehrere mit tollen Titeln, aber das ist wie beim C3: einige Vorträge sind super, obwohl das Thema weniger interessant ist und einige Vorträge sind von komischen Leuten die ihre komischen Ideen pushen wollen.
Verfasst: Sonntag 25. Januar 2009, 22:29
von sma
Zed Shaw's The ACL is Dead-Vortag war in der Tat super. Hier ein paar subjektive Empfehlungen: Matz's Keynote - langweilig. Dave Thomas Keynote - must see. Scott Shacon's Git-Vortrag: fand ich spannend. MacRuby - lieber den HotCocoa-Vortrag anschauen. MagLev - für mich als alten Smalltalk-Fan interessant. Jim Weirich und Thread - wie immer gut. Jim Weirich & Chris Nelson - Very, very funny. Guckbefehl. How Ruby Can Be Fast - wenn man sich für VM-Technik interessiert. Chris Nelson & Ruby in the Browser - interessant. Two Turntables And A Git Repo - Thema fand ich nicht so interessant, aber sehr guter unterhaltsamer Vortrag. Red Sun (Ruby on Flash) - bemerkenswertes Projekt, Vortragsstil könnte besser sein. Duby - interessantes Projekt. Forth - gucken, da man diese Sprache kennen sollte. Terminal.app - ich fand witzig, dass da der Entwickler dieser Mac-App mal 5min sein Programm lobt.