Ich habe eine sehr grundlegende Frage über die praktische Funktionsweise von Software-Plugin-Systemen. Ich verstehe, wie ein einfaches Plugin-Design funktioniert, dh ein Plugin, das zu einer Hosting-Anwendung hinzugefügt wird. ZB fügt ein Plugin einem Malprogramm einen neuen Filter hinzu. Der Host weiß, dass er eine Methode namens filter aufrufen muss, die das Plugin bereitstellt. In diesem Fall sind alle Plugins unabhängig.
Meine Frage bezieht sich auf den Fall, dass ein Plugin die Möglichkeiten in einem anderen Plugin nutzen kann. Zum Beispiel gibt es möglicherweise ein Plugin, das die Möglichkeit bietet, Daten zu plotten, während ein anderes Plugin Daten generiert. Wenn das Datengenerator-Plugin das Grafik-Plugin noch nie gesehen hat, gehe ich davon aus, dass es keine Möglichkeit gibt, zu wissen, welche Methoden im Grafik-Plugin aufgerufen werden müssen. Ich vermute, dass der Entwickler des Datengenerator-Plugins in diesen Fällen entweder in Form einer abstrakten Klasse oder einer Schnittstelle Zugriff auf eine Beschreibung der API des Graphing-Plugins haben muss. Funktioniert die Plugin-Abhängigkeit, dh Plugins wissen explizit über die Apis, die andere Plugins haben könnten?
Ich habe gerade ein solches Plugin-System erstellt und damit Plugins andere Plugins verwenden können, füge ich in den Quellcode Kopien der Plugin-Schnittstellen ein, über die jedes Plugin Bescheid wissen muss. Das Problem bei diesem Ansatz besteht darin, dass, wenn ein neues Plotting-Plugin mit einer anderen API kommt, es keine Möglichkeit für das Datengenerator-Plugin gibt, es zu verwenden, ohne es zuvor neu zu kompilieren, damit es die neue API kennt. Das scheint mir nicht richtig zu sein.
Ich weiß, dass dies eine sehr einfache Frage zu sein scheint und eine offensichtliche Antwort hat, aber ich habe Stunden damit verbracht, im Internet zu suchen, und ich bin nicht auf eine ausdrückliche Aussage zu dieser Frage gestoßen.
Wenn Ihr "neues Plot-Plugin" eine andere API hat als die, von der Ihr Code weiß, gibt es keine andere Möglichkeit, als Ihren Code auf diese API aufmerksam zu machen.
Wenn Sie alles unter Kontrolle haben, einschließlich der verschiedenen Plotting-Plugins, sollten Sie eine Standard-Plotting-API angeben, die alle Plotting-Plugins implementieren / unterstützen müssen. Das ist die einzige Möglichkeit, verschiedene Provider (Plugins) für eine Aufgabe zu haben.
Eine Standard "Sprache" stellt sicher, dass Sie mehrere Implementoren einer Schnittstelle (Provider eines Dienstes) verwenden können. Es ist auch die Art, wie Sie mehrere Benutzer der gleichen Schnittstelle haben können (Verbraucher eines Dienstes).
Die Notwendigkeit / der Wunsch nach mehreren Anbietern einer Aufgabe und nach mehreren Konsumenten eines Anbieters führte wahrscheinlich zur Schaffung von Standards wie OAuth und von Protokollen wie HTTP, SMTP und dergleichen.