Seite 1 von 1

MixIn bzw. PlugIn Technik - Wie funktionierts ?

Verfasst: Sonntag 12. Februar 2006, 09:42
von Mad-Marty
Hallo,

ich habe vor, das mein programm, Plugins aus dem ordner plug-in lädt.

Spontan fällt mir dazu ein das die plugins eine methode register bekommen,
womit sie sich in der applikation registern / eintragen. Das Hauptprogramm geht den ordner durch, importiert jedes Plugin und ruft die Methode auf.

Erreichen will ich damit das wenn das Plugin "12 Uhr Mail" geladen wird, es
sich einträgt, seine konfiguration liesst aus einem ini, und dann 12 Uhr Post an mich verschickt. Kommt dann noch jemand auf die Idee schmeisst er eben noch ein anderes Plugin rein was eineandere konfiguration benutzt.

(Nicht gerade ein bombenbeispiel für NOTWENDIGKEIT ... aber hoffe es ist verständlich.

Oder gibt es für sowas bessere lösungsansätze ?
Danke schonmal.

Verfasst: Freitag 17. Februar 2006, 18:40
von Mad-Marty
*bump*

Verfasst: Samstag 18. Februar 2006, 00:25
von mitsuhiko
Da gibt es ziemlich viele Ansätze. Für Pocoo hab ich eine Metaklasse, die Klasen in einer Registry eintragen.
Jede Klasse kann ExtensionPoints für Interfaces bereitstellen und/oder welche implementieren. In einem Extension Point für IRequestHandler sammeln sich beispielsweise alle Klassen, die einen IRequestHandler implementieren.

hier ist die API: http://trac.pocoo.org/browser/trunk/pocoo/api.py
hier eine Klasse mit IRequestHandler Extension Point: http://trac.pocoo.org/browser/trunk/poc ... ication.py
Und hier eine Klasse, die den IRequestHandler implementiert: http://trac.pocoo.org/browser/trunk/poc ... s/index.py

Verfasst: Dienstag 21. Februar 2006, 23:26
von Mad-Marty
ok, also das ist jetzt mix-in oder ?

Würde denken das ist eher Decorator, bin mir da aber nicht so sicher ;)

Was bedeutet ein "* interface" in der deklaration ?



Also ich habe mal versucht an die sache mit einem

for file in os.listdir(".")
__import__ (file, locals(), globals, [])

heranzugehen, dann instanzieren der hauptklasse des plugins die so heissen muss wie die datei. Das hat auch funktioniert.
Das ganze erlegt aber einem Plugin relativ strikte bedingungen auf, welche Methoden implementiert sein müssen damit es brauchbar ist.

Aber denke mal das muss so sein. Denke vererbung aus einer template klasse ist das ja auch kein problem.

Könntest du deinen ansatz da noch ein bischen erklären ?
Verstehe nämlich leider nicht viel von deinem geposteten source :-(