Wie soll ich beginnen, wenn ein System auf Basis von Modulen oder Plugins zu entwickeln?

StackOverflow https://stackoverflow.com/questions/78004

  •  09-06-2019
  •  | 
  •  

Frage

Ich habe die Absicht, ein System zu entwickeln, die auf Module vollständig basieren. Die Systembasis soll Unterstützung hat für über Plugins herauszufinden, beginnen sie und Möglichkeiten zu schaffen, in der Lage, für diese Module zu kommunizieren. Im Idealfall sollte man in der Lage sein, in neuen Module zu setzen und nicht verwendeten Module nach Belieben ausreißen und Module sollten jeweils anderen funcionality zu verwenden, wenn es verfügbar ist.

Dieses System sollte als Grundlage für Simulationssysteme eingesetzt werden, wo eine Menge Sachen in verschiedenen Modulen geschieht, und andere Module möchten vielleicht etwas auf dieser Grundlage tun.

Das System I zu entwickeln beabsichtigen, wird in Java sein. So wie ich es sehe, beabsichtige ich, für jedes Modul einen Ordner mit einem Unterordner zu haben, die eine XML enthält, die das Modul mit Informationen wie Name beschreibt, vielleicht, welche Ereignisse es könnte erhöhen, solche Sachen. Ich glaube, ich muß möglicherweise einen benutzerdefinierten Classloader schreiben, dieses Zeug zu arbeiten.

Die Sache ist, ich weiß nicht, ob meine Idee hält eigentlich kein Wasser und, natürlich, ich beabsichtige, einen funktionierenden Prototyp auf dem Aufbau. Allerdings habe ich noch nie gearbeitet, bevor ein wirklich modulares System auf, und ich bin nicht wirklich sicher, was der beste Weg ist, auf diesem Problem zu nehmen.

Wo soll ich anfangen? Gibt es gemeinsame Probleme und Gefahren, die gefunden werden, während diese Art von System zu entwickeln? Wie kann ich die Module miteinander sprechen, während Isolation beibehalten wird (das heißt, ein Modul entfernen und ein anderes Modul, das es bleibt gesund wurde mit)? Gibt es Führungen, Spezifikationen oder Artikel, die ich, dass könnte mir ein paar Ideen, wo ich anfangen soll lesen kann? Es wäre besser, wenn sie auf Java basiert, aber dies ist nicht erforderlich, wie das, was ich suche jetzt Ideen sind, nicht-Code.

Jedes Feedback ist willkommen.

War es hilfreich?

Lösung

Sie sollten auf jeden Fall sehen OSGi . Es zielt darauf ab, sein die Komponente / Plugin-Mechanismus für Java. Es ermöglicht Ihnen, Ihren Code modularisieren (in sogenannten Bundles) und Update-Bundles zur Laufzeit. Sie können auch verstecken vollständig Implementierung Pakete vor unerwünschten Zugriffen von anderen Bundles, zB. bietet nur das API.

Eclipse-war das erste große Open-Source-Projekt OSGi zu implementieren und zu nutzen, aber sie haben nutzen sie nicht vollständig (keine Plugin-Installationen / Updates ohne Neustart). obwohl, wenn Sie von Grund auf neu beginnen, es wird Ihnen einen sehr guten Rahmen für ein Plugin-System.

Apache Felix ist eine Open-Source-Implementierung (und es gibt andere, wie Eclipse-Equinox ).

Andere Tipps

Ohne ins Detail zu bekommen, sollten Sie unter Frühling und eine Einarbeitungs mit OSGi oder der Eclipse RCP-Frameworks Sie werden auch einige grundlegende Konzepte, die Sie müssen im Auge behalten.

Eine weitere Option ist die ServiceLoader in Java 1.6 hinzugefügt.

Sie sind viele, wie es aber etwas einfach zu tun, indem sie mithilfe von Reflektion sein kann. Sie schreiben in Ihrem XML-Datei Name der Datei (das wäre eine Klasse in reallity sein). Sie können als überprüfen, welche Art es ist, und schaffen es mit Reflexion zurück. Die Klasse könnte eine gemeinsame Schnittstelle haben mit denen Sie finden, wenn die externe Datei / Klasse wirklich eines Moduls ist. Hier sind einige Informationen über Reflexion .

Sie können auch einen vorcodierten Rahmen wie dieser Source ein verwenden Link-Text , die Ihnen ein erster guter Schritt Modul / Plugin zu erstellen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top