BeanFactory für Python

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
DatenMetzgerX
User
Beiträge: 398
Registriert: Freitag 28. April 2006, 06:28
Wohnort: Zürich Seebach (CH)

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 =)
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Glaub nicht, sowas ist in Python ja auch ziemlich trivial zu lösen. Python ist kein Java trifft es da glaube ich ganz gut.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Leonidas hat geschrieben: Gedankenlesen über JTCS*?).

* Java Thought Control Standard
LOL ... you made my day :-D
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

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
Benutzeravatar
helduel
User
Beiträge: 300
Registriert: Montag 23. Juli 2007, 14:05
Wohnort: Laupheim

Moin,

es gibt ja Spring auch für Python (wahrscheinlich nicht alles, was Java-Spring bietet). Hast du dir das mal angeschaut?

Gruß,
Manuel
Benutzeravatar
DatenMetzgerX
User
Beiträge: 398
Registriert: Freitag 28. April 2006, 06:28
Wohnort: Zürich Seebach (CH)

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.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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?
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

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
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

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.
Antworten