Grundlegendes über eine Plugin Schnittstelle
Jeena Paradies
- programmiertechnik
Hallo,
Wie funktioniert eigentlich grundsätzlich eine Plugin Schnittstelle? Ich arbeite gerade an einer Blogsoftware und da möchte ich den Leuten (in ferner Zukunft) die Gelegenheit geben sich funktionen, die die Software in der Grundversion nicht hat durch plugins nachzuinstallieren.
Leider weiß ich nicht so richtig nach was ich suchen soll, um mir da Grundlagen auf diesem Gebiet zu erarbeiten/-lesen. Aber vielleicht kann mich einer von euch mal aufklären, oder mir mit einem guten Link weiterhelfen?
Grüße
Jeena Paradies
Hi JP,
Plug-ins sind ein Software Design Pattern. Wobei für einen bestimmten Plug-In-Typen, welcher eine bestimmte Funktion unterstützen, erweitern soll, z.b. ein X.509 Zertifikat o.ä. laden, ein Interface mit einer zu implementierenden Methode (oder/und auch Properties) geschrieben wird, welches öffentlich ist.
Um es mit C# auszudrücken:
public interface ICertificatePlugin
{
string Fingerprint { get; }
void LoadCertificate();
}
Du schreibst dann deine Implementierung der jeweiligen Properties und Methoden, kompilierst das ganze, packst es in einen Ordner, wo die Hauptanwendung das Kompilat (.dll o.ä.) laden kann. z.b.
public class X509CertLoader: ICertificatePlugIn
{
private string fingerprint = string.empty;
// c'tor
public X509CertLoader() { }
// implementing the property defined by the interface
public string Fingerprint
{
get { return this.fingerprint; }
}
// implementierung der eigentlich geforderten Methode
public void LoadCertificate
{
// ... dein Programmcode
}
}
Wenn jetzt die Hauptanwendung dein Plug-In ausführen möchte, wird sie (wenn nicht schon beim Start getan) deine Komponente laden und als Objekt instanzieren. Anhand der Angabge, welches Interface du implementierst kann sich die Hauptanwendung darauf verlassen, dass es eine bestimmte Methode/Property in deinem Objekt aufrufen kann. Dies tut es dann auch.
Der ganze Vorgang wird von meist einem "Manager"/"Singleton" Pattern begleitet, welches dafür verantwortlich ist:
Wenn du da genauer drüber bescheid wissen möchtest, schau dir am besten folgende Literatur an: http://www.amazon.de/exec/obidos/ASIN/0201633612/ref=ed_of_dp_1/302-6419383-1160809
HTH, Ciao, Frank
P.S. ich übernehme keine Garantie für die Vollständigkeit und fachliche Unfehlbarkeit meiner Angaben :-)
Hallo,
Vielen vielen Dank für die Aufklärung. Ich sehe also, dass das Prinzip von Plugins nur innerhalb einer Strickten Objekt orientierten Programmierung funktioniert. So weit bin ich noch nicht, habe ers angefangen OOP zu benutzen. Aber jetzt weiß ich endlich wann ich anfangen kann mich damit zu beschäftigen und zwar nachdem ich auf OOP umgestellt habe.
Grüße
Jeena Paradies
Hi,
Vielen vielen Dank für die Aufklärung. Ich sehe also, dass das Prinzip von Plugins nur innerhalb einer Strickten Objekt orientierten Programmierung funktioniert.
Nein, sooo schlimm ist das nicht.
Es kam beim Frank wahrscheinlich nicht so ganz raus, deshalb hier nochmal in anderen Worten (ob's dadurch verständlicher wird, ist natürlich eine andere Frage ;-)
Ein Plugin ist, wie der Name schon anzudeuten versucht, etwas, das Du irgendwo reinstöpselst. Zum Einstöpseln müssen Stecker und Steckdose zueinander passen. Das Hauptprogramm bietet hierzu die "Steckdose" in Form einer festgelegten Schnittstelle an. Einfachste Form sei mal ein Progrämmchen, das Text auf einer Seite annimmt und auf der anderen ausgibt. Es stellt Plugins eine Schnittstelle zur Verfügung, die einmal den Eingabetext hält und auf der anderen Seite den Ausgabetext nimmt. Jetzt kannst Du da Plugins einstecken, die z.B. alle Umlaute in Doppellaute umwandeln (ä in ae, ü in ue usw), oder alles Vorkommen von Foo in Bar.
Der Linuxkernel funktioniert so, der Apache und viele andere Programme auch.
Ist also alles nicht so schwierig, wenn man erstmal alle Buzzwords entfernt hat ;-)
Aber eines ist _sehr_ wichtig, wenn Du auch andere Leute Plugins schreiben lassen möchtest: die Schnittstelle muß stabil sein, die kannst Du nicht alle naselang ändern (Zusätze sind erlaubt, Änderungen oder Entfernen dagegen nicht), die sollte schon einige Jahre halten und sie muß einfach sein.
Wenn Du verrätst, in welcher Sprache Du das schreiben möchtest, kann ich ja mal Beispiele suchen gehen. Zumindest ich komme mit praktischen Beispielen besser zurecht, als mit theoretischen Abhandlungen, aber ich weiß natürlich nicht, wie das bei Dir ist.
so short
Christoph Zurnieden
Hallo,
Aahh, jetzt verstehe ich so langsam wie das gemeint ist.
Wenn Du verrätst, in welcher Sprache Du das schreiben möchtest, kann ich ja mal Beispiele suchen gehen. Zumindest ich komme mit praktischen Beispielen besser zurecht, als mit theoretischen Abhandlungen, aber ich weiß natürlich nicht, wie das bei Dir ist.
Wie es sich für einen ordentlichen Haupschüler gehört: PHP ;-) und ja ich kann auch durch Beispiele besser zurechtkommen, als mit rein theoretischen Abhandlungen.
Grüße
Jeena Paradies
Hi,
Christoph hat recht mit seiner Aussage, Plug-Ins sind einfach zusätzliche Komponenten, die sich ein- und ausstöpseln können lassen (müssen) - in dem sie vorgegebenen stabilen Interfaces entsprechen. Es ist einfach eine Art Konzept, und nicht wirklich abhängig von OOP.
Ich hab nur gerade .Net / C# als Beispiel genommen, weil ich damit gerade sehr viel solcher Plug-In Geschichten umsetze.
Ciao, als denn, Frank (immer noch aus CA)
Hi,
Wie es sich für einen ordentlichen Haupschüler gehört: PHP ;-) und ja ich kann auch durch Beispiele besser zurechtkommen, als mit rein theoretischen Abhandlungen.
Tja, jetzt find' mal was auf die Schnelle, da habe ich's Maul wohl etwas zu voll genommen ;-)
http://phphomepage.mirrors.phpclasses.org/browse/package/1.html
ist 'was mit Plugins, allerdings auch schon recht elaboriert.
Naja, wenn ich nichts finde, muß ich wohl selber ran ;-)
so short
Christoph Zurnieden
Hi Christoph,
ich revidiere meine Meinung über dich auch gern wieder.
Ciao, viele Grüße aus CA
Frank
Hallo Frank,
Ciao, viele Grüße aus CA
California?
Da wär ich jetzt auch lieber als hier in Good Ol'Germany...
Wo dort ungefähr?
Martin
Hi,
genau .. California ... Rancho Bernardo/Escondido/San Diego
Über das Wetter kann man sich nicht beklagen, die Mädels alle noch recht leicht bekleidet.... Anfang der Woche war es etwas regnerisch, aber heute (Fr, 2pm) ist grandioser Sonnenschein. Schade, dass ich am Sonntag schon wieder weiterreisen muss (nach Peking)
Ciao, man liest sich.
Frank