Implementação moderna de Java do Blackboard Pattern?

11

Existe espaço para uma aplicação prática e moderna em Java do Blackboard Pattern, detalhada em "O programador pragmático" ? Existe alguma biblioteca em particular que tenta ajudar na implementação desse conceito? Qual é o consenso geral sobre esse padrão na atual comunidade de software (especialmente Java)?

Embora a idéia seja intrigante, sinto que essa parte do livro pode estar desatualizada.

Caso você não esteja familiarizado com esse conceito: http://flylib.com/books/en/1.315.1.55/1/

smp7d
fonte
Pode querer verificar isso assim: stackoverflow.com/questions/1204667/...
Steven Evers
O primeiro link da pergunta está quebrado. O segundo é um longo artigo que aborda detalhadamente vários outros padrões e depois lista os Blackboards como relacionados, mas não diz nada sobre eles. Alguém familiarizado com o termo pode editar a pergunta e adicionar uma breve definição ou exemplo?
Jules
@Jules Algumas leituras: flylib.com/books/en/1.315.1.56/1 e en.wikipedia.org/wiki/Blackboard_system
ESTE USUÁRIO PRECISA DE AJUDA

Respostas:

6

Minha opinião é que muitas das estruturas modernas de Injeção de Dependências são mais ou menos uma implementação do padrão de quadro branco para arquitetura de aplicativos. O Google Guice, em particular, permite que você obtenha instâncias específicas de um objeto no "Injetor" (ou no quadro branco como você gostaria de chamá-lo) anotando os objetos que ele cria de várias maneiras (inclusive pelo nome usando a anotação @Named) . Ele também permite que diferentes módulos colaborem na contribuição de serviços para o Injector (quadro branco).

O Spring é semelhante, cada arquivo XML de contexto (por exemplo) pode contribuir e usar objetos do contexto do Spring (quadro branco).

O OSGi e seu registro de serviço é outro exemplo de implementação de quadro branco. Aqui está uma descrição de como o OSGi usa e suporta o padrão de quadro branco para sua inversão do controle de manipulação de eventos em sistemas baseados em OSGi

Aqui está um tutorial sobre o relacionamento entre os módulos dinâmicos do Spring, OSGi e o padrão do quadro branco (página 51).

Minha experiência é que o Guice, em particular, também é muito poderoso para apoiar sua própria implementação do padrão de quadro branco. Se a maioria dos seus objetos estiver sendo injetada no Guice Injector (quadro branco), é fácil injetá-los com qualquer outro quadro branco de que uma classe específica precise. Portanto, você pode inicializar um quadro branco específico (por exemplo, um contendo fatos sobre o seu domínio) usando o quadro branco da arquitetura de aplicativos Guice. (Você pode fazer o mesmo com o Spring, OSGi ou muitos outros, embora talvez não seja tão diretamente).

flamingpenguin
fonte
3
Caso alguém mais esteja se perguntando sobre isso, lousas e lousas parecem termos intercambiáveis. Os quadros brancos são como Barbara Liskov os chamava, mas esse termo parece ter ficado (principalmente) fora de uso, em favor dos quadros negros.
Wouter
2

Bem, os padrões de design são exatamente isso; padrões conceituais para o desenvolvimento de algoritmos, não necessariamente implementações do referido padrão que funcionam no caso geral. Como tal, as bibliotecas que fornecem funcionalidade "interna" podem usar um padrão específico e podem até ser exemplos brilhantes do uso do referido padrão, mas não são o padrão. Você não precisa de uma classe StrategyProvider que possa ser configurada para atender a qualquer necessidade, basta definir um conjunto de classes e estruturá-las para seguir o padrão Estratégia.

A ideia é intrigante. Parece que funcionaria bem para organização de documentos, fluxograma, redes sociais etc. etc. No entanto, sua implementação em cada um desses cenários seria bem diferente e, embora haja sobreposição, pode ser impossível criar uma implementação que atenda às requisitos de todos esses cenários, sem exibir "efeito da plataforma interna" (um objeto / biblioteca / aplicativo tão complexo e configurável que basicamente se torna uma reimplementação do IDE usado para construí-lo).

KeithS
fonte
1
Acho que os retaggers ficaram um pouco zelosos demais. Eu consideraria isso mais um padrão arquitetural do que um padrão de design. Mais de acordo com a SOA do que o padrão de fábrica. Talvez eu não devesse ter usado a palavra 'padrão'
smp7d 02/02/2012
Eu acho que minha resposta permanece; Blackboard é um "padrão" usado para criar implementações específicas de requisitos, e o próprio padrão não se destina a ter uma implementação de caso geral. Seu exemplo de SOA ainda é apenas um conceito; você não pode criar um "mecanismo SOA" significativo sem saber qual será o uso pretendido (o WCF da Microsoft pode ser considerado um "mecanismo SOA", mas na verdade é uma arquitetura de proxy que pode ser aplicada a um design SOA para simplificar as comunicações detalhes; é inútil sem a sua implementação e fronteiras na plataforma interna, mas é o .NET, portanto esperamos isso).
#
Sua resposta definitivamente não é sem mérito. No entanto, pode haver tecnologias que auxiliam no uso desse padrão. Só porque não há implementação unificada da funcionalidade de serviço da web para atender a todos os requisitos, não significa que não haja bibliotecas e pacotes em Java para ajudar nessa área. No entanto, editarei minha pergunta para deixar isso mais claro. Obrigado.
21812 smp7d
0

O OpeBBS (Open BlackBoard System) se parece com uma implementação Java para suportar o uso do padrão Blackboard.

No site deles :

O OpenBBS é um sistema de quadro aberto e extensível para o desenvolvimento de fluxos de trabalho flexíveis. A flexibilidade é alcançada através da adoção do padrão de quadro-negro. O OpenBBS é modular e incorporável, o que o torna uma solução de peso leve para fluxos de trabalho.

A fonte, jar e javadoc podem ser encontrados no Sourceforge . O Javadoc parece mencionar muitas das classes que você esperaria (Blackboard, BlackboardControl, ControlPlan, KnowledgeSource, ...).

A única desvantagem é que o último (e único?) Lançamento parece ser de 2007.

Wouter
fonte