2008-09-19 4 views
5

Ich suche nicht so viel nach sprachspezifischen Antworten, nur allgemeine Modelle für die Implementierung eines Plugin-Systems (wenn Sie wissen wollen, ich benutze Python). Ich habe meine eigene Idee (Callbacks registrieren, und das ist es), aber ich weiß, dass andere existieren. Was wird normalerweise verwendet und was ist noch sinnvoll?Welche Möglichkeiten gibt es, ein Plugin-System zu implementieren?

Was meinen Sie mit einem Plugin-System? Sind Dependency Injection- und IOC-Container eine gute Lösung?

Ich meine, äh, naja, eine Möglichkeit, Funktionalität in das Basisprogramm einzufügen, ohne es zu verändern. Ich hatte nicht vor, es zu definieren, wenn ich mich auf den Weg mache. Dependency Injection nicht aussehen besonders geeignet für das, was ich tue, aber ich weiß nicht viel über sie.

+0

Ich würde gerne eine Diskussion darüber sehen, wie die Inter-Plugin-Kommunikation zu behandeln ist. Nutzt man öffentliche Veranstaltungen? Themenbereiche? –

+0

Was meinst du mit einem Plugin-System? Sind Dependency Injection- und IOC-Container eine gute Lösung? –

Antwort

1

Es ist eine sehr gute episode von Software Engineering Radio, die Sie interessieren könnten.

Für die Zukunft, ich habe hier die "Rules for Enablers" wiedergegeben (alternative link) in der ausgezeichneten Contributing to Eclipse von Erich Gamma, Kent Beck gegeben .

  • Einladung Rule - Wenn möglich, lassen Sie andere auf Ihre Beiträge beisteuern.
  • Lazy Loading Rule - Beiträge werden nur geladen, wenn sie benötigt werden.
  • Safe Platform Rule - Als Anbieter eines Erweiterungspunkts müssen Sie sich vor Fehlverhalten von Extendern schützen.
  • Fair Play-Regel - Alle Kunden spielen nach den gleichen Regeln, auch ich.
  • Explizite Erweiterungsregel - Deklarieren Sie ausdrücklich, wo eine Plattform erweitert werden kann.
  • Regel Diversity - Erweiterungspunkte akzeptieren mehrere Erweiterungen.
  • Regel für gute Zäune - Schützen Sie sich, wenn Sie die Steuerung außerhalb Ihres Codes übergeben.
  • Explizite API-Regel - trennen Sie die API von Interna.
  • Stabilitätsregel - Sobald Sie jemanden zum Spenden einladen, ändern Sie die Regeln nicht.
  • Defensive API-Regel - Zeigen Sie nur die API an, in der Sie sich sicher sind, aber seien Sie bereit, mehr API offen zu legen, wenn Clients danach fragen.
1

In Python können Sie das Einstiegspunktsystem von setuptools und pkg_resources verwenden. Jeder Einstiegspunkt sollte eine Funktion sein, die Informationen über das Plugin zurückliefert - Name, Autor, Setup und Teardown-Funktionen usw.

2

Eine einfache Plugin-Architektur kann eine Plugin-Schnittstelle mit allen Methoden definieren, die das Plugin implementieren soll. Das Plug-in behandelt das Ereignis aus der Anwendung und kann den Standardcode, die Modellobjekte usw. der Anwendung verwenden, um die Aufgaben zu erledigen. Im Grunde das gleiche wie ein ASP.NET-Formular, außer dass Sie überschreiben anstatt implementieren.

Niemand hat mir diesen Teil beigebracht, und ich bin kein Experte, aber ich fühle: Im Allgemeinen wird ein Plugin weniger stabil sein als seine Anwendung, daher sollte die Anwendung immer die Kontrolle haben und dem Plugin nur periodische Handlungsmöglichkeiten geben . Wenn ein Plugin einen Observer registrieren kann, sollten Aufrufe an den Delegierten versucht/abgefangen werden.

0

Wie wäre es abstract factory? Ihr Basisprogramm definiert, wie die abstrakten Konzepte miteinander interagieren, aber der Aufrufer muss die Implementierung bereitstellen.