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/
Respostas:
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).
fonte
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).
fonte
O OpeBBS (Open BlackBoard System) se parece com uma implementação Java para suportar o uso do padrão Blackboard.
No site deles :
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.
fonte