MixIn bzw. PlugIn Technik - Wie funktionierts ?

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
Mad-Marty
User
Beiträge: 317
Registriert: Mittwoch 18. Januar 2006, 19:46

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.
Zuletzt geändert von Mad-Marty am Freitag 17. Februar 2006, 18:42, insgesamt 1-mal geändert.
Mad-Marty
User
Beiträge: 317
Registriert: Mittwoch 18. Januar 2006, 19:46

*bump*
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

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
TUFKAB – the user formerly known as blackbird
Mad-Marty
User
Beiträge: 317
Registriert: Mittwoch 18. Januar 2006, 19:46

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 :-(
Antworten