Moderne Java-Implementierung von Blackboard Pattern?

11

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/

smp7d
quelle
Vielleicht möchten Sie dies auch überprüfen: stackoverflow.com/questions/1204667/…
Steven Evers
Der erste Link in der Frage ist unterbrochen. Der zweite ist ein langer Artikel, der sich eingehend mit mehreren anderen Mustern befasst und dann Blackboards als verwandt auflistet, aber nichts darüber sagt. Könnte jemand, der mit dem Begriff vertraut ist, bitte die Frage bearbeiten und eine kurze Definition oder ein Beispiel hinzufügen?
Jules
@ Jules Einige Lesungen: flylib.com/books/en/1.315.1.56/1 und en.wikipedia.org/wiki/Blackboard_system
DIESER BENUTZER BRAUCHT HILFE

Antworten:

6

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).

Flamingpenguin
quelle
3
Falls sich jemand anderes darüber wundert, scheinen Whiteboards und Blackboards austauschbare Begriffe zu sein. Whiteboards sind das, was Barbara Liskov sie nannte, aber dieser Begriff scheint (meistens) zugunsten von Tafeln nicht mehr verwendet zu werden.
Wouter
2

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).

KeithS
quelle
1
Ich denke, die Retagger sind etwas übereifrig geworden. Ich würde dies eher als architektonisches Muster als als Entwurfsmuster betrachten. Mehr im Einklang mit SOA als mit dem Fabrikmuster. Vielleicht hätte ich das Wort 'Muster' nicht verwenden sollen
smp7d
Ich denke, meine Antwort steht; Blackboard ist ein "Muster", das zum Erstellen anforderungsspezifischer Implementierungen verwendet wird, und das Muster selbst ist nicht für eine allgemeine Implementierung vorgesehen. Ihr Beispiel für SOA ist immer noch nur ein Konzept. Sie können keine aussagekräftige "SOA-Engine" erstellen, ohne zu wissen, wie die beabsichtigte Verwendung aussehen soll (Microsofts WCF wird möglicherweise als "SOA-Engine" angesehen, aber es handelt sich tatsächlich um eine Proxy-Architektur, die auf ein SOA-Design angewendet werden kann, um die Kommunikation zu vereinfachen Details; es ist ohne Ihre Implementierung nutzlos und grenzt an die innere Plattform, aber es ist .NET, also erwarten wir das).
KeithS
Ihre Antwort ist definitiv nicht unbegründet. Es kann jedoch Technologien geben, die bei der Verwendung dieses Musters helfen. Nur weil es keine einheitliche Implementierung von Webdienstfunktionen gibt, die alle Anforderungen erfüllt, bedeutet dies nicht, dass es in Java keine Bibliotheken und Pakete gibt, die in diesem Bereich helfen könnten. Trotzdem werde ich meine Frage bearbeiten, um dies klarer zu machen. Vielen Dank.
smp7d
0

OpeBBS (Open BlackBoard System) sieht aus wie eine Java-Implementierung zur Unterstützung der Verwendung des Blackboard-Musters.

Von ihrer Website :

OpenBBS ist ein offenes und erweiterbares Blackboard-System zur Entwicklung flexibler Workflows. Die Flexibilität wird durch die Übernahme des Tafelmusters erreicht. OpenBBS ist modular aufgebaut und einbettbar, was es zu einer leichten Lösung für Workflows macht.

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.

Wouter
quelle