Implementazione Java moderna di Blackboard Pattern?


11

C'è spazio per un'applicazione pratica e moderna in Java del modello Blackboard descritto in "The Pragmatic Programmer" ? Esiste una biblioteca particolare che tenta di aiutare l'implementazione di questo concetto? Qual è il consenso generale su questo modello nell'attuale comunità del software (specialmente Java)?

Sebbene l'idea sia intrigante, ho la sensazione che questa parte del libro possa essere obsoleta.

Nel caso in cui non si abbia familiarità con questo concetto: http://flylib.com/books/en/1.315.1.55/1/


Potrebbe voler dare un'occhiata anche a questo: stackoverflow.com/questions/1204667/…
Steven Evers

Il primo collegamento nella domanda è interrotto. Il secondo è un lungo articolo che approfondisce in modo ragionevole diversi altri schemi, quindi elenca le lavagne come correlate, ma non dice nulla al riguardo. Qualcuno potrebbe avere familiarità con il termine per favore modifica la domanda e aggiungi una breve definizione o esempio?
Jules,

Risposte:


6

La mia opinione è che molti dei moderni framework di Dependency Injection sono più o meno un'implementazione del modello di lavagna per l'architettura delle applicazioni. Google Guice in particolare ti consente di ottenere particolari istanze di un oggetto dall '"Iniettore" (o lavagna come potresti chiamarlo) annotando gli oggetti che crea in diversi modi (incluso per nome usando l'annotazione @Named) . Inoltre, consente a diversi moduli di collaborare nel fornire servizi all'iniettore (lavagna).

Spring è simile, ogni file XML di contesto (ad esempio) può contribuire e utilizzare oggetti dal contesto Spring (lavagna).

OSGi e il suo registro dei servizi sono un altro esempio di implementazione di una lavagna. Ecco una descrizione di come OSGi utilizza e supporta il modello di lavagna per la sua inversione di controllo della gestione degli eventi nei sistemi basati su OSGi

Ecco un tutorial sulla relazione tra i moduli dinamici Spring, OSGi e il modello della lavagna (pagina 51).

La mia esperienza è che Guice in particolare è anche molto potente per supportare la propria implementazione del modello di lavagna. Se la maggior parte dei tuoi oggetti viene iniettata da Guice Injector (lavagna), è facile iniettarli con qualsiasi altra lavagna di cui una classe particolare ha bisogno. Quindi puoi avviare una specifica lavagna bianca (ad esempio una contenente fatti relativi al tuo dominio) usando la lavagna bianca dell'architettura dell'applicazione Guice. (Puoi fare lo stesso con Spring, OSGi o molti altri anche se forse non così direttamente).


3
Nel caso qualcuno se lo stia chiedendo, le lavagne e le lavagne sembrano termini intercambiabili. Le lavagne sono come le chiamavano Barbara Liskov, ma questo termine sembra essere (per lo più) fuori uso, a favore delle lavagne.
Wouter,

2

Bene, i modelli di progettazione sono esattamente questo; schemi concettuali per lo sviluppo di algoritmi, non necessariamente implementazioni di detto schema che funzionano nel caso generale. Pertanto, le librerie che forniscono funzionalità "incorporate" possono utilizzare un modello particolare e possono persino essere esempi brillanti dell'uso di tale modello, ma non sono IL modello. Non è necessaria una classe StrategyProvider che può essere configurata per soddisfare qualsiasi esigenza, è sufficiente definire un insieme di classi e strutturarle per seguire il modello di strategia.

L'idea è intrigante. Sembra che funzionerebbe bene per l'organizzazione di documenti, la creazione di diagrammi di flusso, i social network, ecc. Tuttavia, la sua implementazione in ciascuno di quegli scenari sarebbe abbastanza diversa, e mentre ci sono sovrapposizioni potrebbe essere impossibile creare un'implementazione che soddisfi il requisiti di tutti questi scenari, senza esibire "effetto di piattaforma interna" (un oggetto / libreria / applicazione così complessa e configurabile da diventare sostanzialmente una reimplementazione dell'IDE utilizzato per costruirlo).


1
Penso che i retagger siano diventati un po 'troppo zelanti. Lo considererei più un modello architettonico che un modello di progettazione. Più in linea con la SOA rispetto al modello di fabbrica. Forse non avrei dovuto usare la parola "modello"
smp7d,

Penso che la mia risposta sia valida; La lavagna è un "modello" utilizzato per creare implementazioni specifiche dei requisiti e il modello stesso non è destinato ad avere un'implementazione del caso generale. Il tuo esempio di SOA è ancora solo un concetto; non è possibile creare un "motore SOA" significativo senza sapere quale sarà l'uso previsto (il WCF di Microsoft potrebbe essere considerato un "motore SOA", ma in realtà è un'architettura proxy che può essere applicata a un progetto SOA per semplificare le comunicazioni dettagli; è inutile senza l'implementazione e i confini sulla piattaforma interna, ma è .NET quindi ci aspettiamo che).
KeithS,

La tua risposta non è sicuramente senza merito. Tuttavia, ci possono essere tecnologie che aiutano nell'uso di questo modello. Solo perché non esiste un'implementazione unificata della funzionalità del servizio Web per soddisfare tutti i requisiti, ciò non significa che non ci siano librerie e pacchetti in Java per aiutare in questo settore. Tuttavia, modificherò la mia domanda per renderlo più chiaro. Grazie.
smp7d,

0

OpeBBS (Open BlackBoard System) sembra un'implementazione Java per supportare l'utilizzo del modello Blackboard.

Dal loro sito Web :

OpenBBS è un sistema di lavagna aperto ed estensibile per lo sviluppo di flussi di lavoro flessibili. La flessibilità si ottiene attraverso l'adozione del modello di lavagna. OpenBBS è modulare e integrabile, il che lo rende una soluzione leggera per i flussi di lavoro.

Source, jar e javadoc sono disponibili su Sourceforge . Javadoc sembra menzionare molte delle classi che ti aspetteresti (Blackboard, BlackboardControl, ControlPlan, KnowledgeSource, ...).

L'unico aspetto negativo è che è l'ultima (e unica?) Versione del 2007.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.