Gibt es in Java Raum für eine praktische moderne Anwendung des in "The Pragmatic Programmer" beschriebenen Blackboard-Musters ? Gibt es eine bestimmte Bibliothek, die versucht, bei der Umsetzung dieses Konzepts zu helfen? Wie ist der allgemeine Konsens über dieses Muster in der gegenwärtigen Software-Community (insbesondere Java)?
Obwohl die Idee faszinierend ist, habe ich das Gefühl, dass dieser Teil des Buches veraltet sein könnte.
Falls Sie mit diesem Konzept nicht vertraut sind: http://flylib.com/books/en/1.315.1.55/1/
Antworten:
Meiner Meinung nach sind viele der modernen Dependency Injection-Frameworks mehr oder weniger eine Implementierung des Whiteboard-Musters für die Anwendungsarchitektur. Insbesondere mit Google Guice können Sie bestimmte Instanzen eines Objekts vom "Injector" (oder Whiteboard, wie Sie es nennen möchten) abrufen, indem Sie die von ihm erstellten Objekte auf verschiedene Arten mit Anmerkungen versehen (einschließlich des Namens mithilfe der Annotation @Named). . Außerdem können verschiedene Module zusammenarbeiten, um Dienste für den Injector (Whiteboard) bereitzustellen.
Spring ist ähnlich. Jede Kontext-XML-Datei (zum Beispiel) kann zu Objekten aus dem Spring-Kontext (Whiteboard) beitragen und diese verwenden.
OSGi und seine Serviceregistrierung sind ein weiteres Beispiel für eine Whiteboard-Implementierung. Hier finden Sie eine Beschreibung, wie OSGi das Whiteboard-Muster für die Umkehrung der Steuerung der Ereignisbehandlung in OSGi-basierten Systemen verwendet und unterstützt
Hier finden Sie ein Tutorial zur Beziehung zwischen Spring Dynamic Modulen, OSGi und dem Whiteboard-Muster (Seite 51).
Ich habe die Erfahrung gemacht, dass insbesondere Guice auch sehr leistungsfähig ist, um Ihre eigene Implementierung des Whiteboard-Musters zu unterstützen. Wenn die meisten Ihrer Objekte vom Guice Injector (Whiteboard) injiziert werden, können Sie sie problemlos mit jedem anderen Whiteboard injizieren, das eine bestimmte Klasse benötigt. Sie können also eine bestimmte weiße Tafel (z. B. eine, die Fakten zu Ihrer Domain enthält) mithilfe der weißen Tafel der Guice-Anwendungsarchitektur booten. (Sie können dies auch mit Spring, OSGi oder vielen anderen tun, obwohl dies möglicherweise nicht so direkt der Fall ist).
quelle
Nun, Designmuster sind genau das; konzeptionelle Muster für die Entwicklung von Algorithmen, nicht notwendigerweise Implementierungen dieses Musters, die im allgemeinen Fall funktionieren. Als solche können Bibliotheken, die "eingebaute" Funktionen bereitstellen, ein bestimmtes Muster verwenden und sogar leuchtende Beispiele für die Verwendung dieses Musters sein, aber sie sind nicht DAS Muster. Sie benötigen keine StrategyProvider-Klasse, die für alle Anforderungen konfiguriert werden kann. Sie definieren lediglich eine Reihe von Klassen und strukturieren sie so, dass sie dem Strategiemuster folgen.
Die Idee ist faszinierend. Es sieht so aus, als würde es gut für die Organisation von Dokumenten, Flussdiagramme, soziale Netzwerke usw. usw. funktionieren. Die Implementierung in jedem dieser Szenarien wäre jedoch sehr unterschiedlich, und obwohl es Überschneidungen gibt, kann es unmöglich sein, eine Implementierung zu erstellen, die den Anforderungen entspricht Anforderungen all dieser Szenarien, ohne einen "plattforminternen Effekt" aufzuweisen (ein Objekt / eine Bibliothek / eine Anwendung, die so komplex und konfigurierbar ist, dass sie im Grunde genommen eine Neuimplementierung der IDE darstellt, mit der sie erstellt wurde).
quelle
OpeBBS (Open BlackBoard System) sieht aus wie eine Java-Implementierung zur Unterstützung der Verwendung des Blackboard-Musters.
Von ihrer Website :
Die Quelle, das Glas und das Javadoc finden Sie auf Sourceforge . Das Javadoc scheint viele der Klassen zu erwähnen, die Sie erwarten würden (Blackboard, BlackboardControl, ControlPlan, KnowledgeSource, ...).
Der einzige Nachteil ist, dass es die neueste (und einzige?) Veröffentlichung aus dem Jahr 2007 zu sein scheint.
quelle