¿Implementación moderna de Java de Blackboard Pattern?

11

¿Hay espacio para una aplicación moderna y práctica en Java del Blackboard Pattern detallado en "The Pragmatic Programmer" ? ¿Hay alguna biblioteca en particular que intente ayudar en la implementación de este concepto? ¿Cuál es el consenso general sobre este patrón en la comunidad actual de software (especialmente Java)?

Aunque la idea es intrigante, tengo la sensación de que esta parte del libro puede estar desactualizada.

En caso de que no esté familiarizado con este concepto: http://flylib.com/books/en/1.315.1.55/1/

smp7d
fuente
Es posible que desee ver esto también: stackoverflow.com/questions/1204667/…
Steven Evers
El primer enlace en la pregunta está roto. El segundo es un artículo largo que profundiza razonablemente en varios otros patrones, luego enumera Blackboards como relacionados, pero no dice nada sobre ellos. ¿Podría alguien familiarizado con el término editar la pregunta y agregar una breve definición o ejemplo?
Jules
@Jules Algunas lecturas: flylib.com/books/en/1.315.1.56/1 y en.wikipedia.org/wiki/Blackboard_system
ESTE USUARIO NECESITA AYUDA el

Respuestas:

6

Mi opinión es que muchos de los marcos de inyección de dependencias modernos son más o menos una implementación del patrón de pizarra para la arquitectura de la aplicación. Google Guice, en particular, le permite obtener instancias particulares de un objeto desde el "Inyector" (o la pizarra como le gustaría llamarlo) al anotar los objetos que crea de varias maneras (incluso por nombre usando la anotación @Named) . También permite que diferentes módulos colaboren en la contribución de servicios al Inyector (pizarra).

Spring es similar, cada archivo XML de contexto (por ejemplo) puede contribuir y usar objetos del contexto Spring (pizarra).

OSGi y su registro de servicio es otro ejemplo de implementación de pizarra. Aquí hay una descripción de cómo OSGi usa y admite el patrón de pizarra para su inversión del control del manejo de eventos en sistemas basados ​​en OSGi

Aquí hay un documento tutorial sobre la relación entre los módulos dinámicos Spring, OSGi y el patrón de pizarra (página 51).

Mi experiencia es que Guice en particular también es muy poderoso para apoyar su propia implementación del patrón de pizarra. Si la mayoría de sus objetos se inyectan desde el inyector Guice (pizarra), entonces es fácil inyectarlos con cualquier otra pizarra que necesite una clase en particular. Por lo tanto, puede iniciar una pizarra blanca específica (por ejemplo, una que contenga datos sobre su dominio) usando la pizarra blanca de arquitectura de la aplicación Guice. (También puede hacer lo mismo con Spring, OSGi o muchos de los otros, aunque tal vez no tan directamente).

flamingpenguin
fuente
3
En caso de que alguien más se pregunte sobre esto, las Pizarras blancas y las pizarras parecen ser términos intercambiables. Las pizarras blancas son lo que Barbara Liskov los llamó, pero este término parece haberse (en su mayoría) fuera de uso, a favor de las pizarras.
Wouter
2

Bueno, los patrones de diseño son exactamente eso; patrones conceptuales para el desarrollo de algoritmos, no necesariamente implementaciones de dicho patrón que funcionan en el caso general. Como tal, las bibliotecas que proporcionan funcionalidad "incorporada" pueden usar un patrón particular, e incluso pueden ser ejemplos brillantes del uso de dicho patrón, pero no son EL patrón. No necesita una clase de StrategyProvider que pueda configurarse para satisfacer cualquier necesidad, simplemente defina un conjunto de clases y estructurarlas para seguir el patrón de Estrategia.

La idea es intrigante. Parece que funcionaría bien para la organización de documentos, diagramas de flujo, redes sociales, etc. Sin embargo, su implementación en cada uno de esos escenarios sería bastante diferente, y aunque hay superposición, puede ser imposible crear una implementación que cumpla con los requisitos requisitos de todos estos escenarios, sin exhibir un "efecto de plataforma interna" (un objeto / biblioteca / aplicación tan complejo y configurable que básicamente se convierte en una reimplementación del IDE utilizado para construirlo).

KeithS
fuente
1
Creo que los retaggers se pusieron demasiado celosos. Consideraría esto más un patrón arquitectónico que un patrón de diseño. Más en línea con SOA que el patrón de fábrica. Tal vez no debería haber usado la palabra 'patrón'
smp7d
Creo que mi respuesta se mantiene; Blackboard es un "patrón" que se utiliza para crear implementaciones específicas de requisitos, y el patrón en sí no está destinado a tener una implementación de caso general. Su ejemplo de SOA sigue siendo solo un concepto; no puede construir un "motor SOA" significativo sin saber cuál será el uso previsto (WCF de Microsoft podría considerarse como un "motor SOA", pero en realidad es una arquitectura proxy que se puede aplicar a un diseño SOA para simplificar las comunicaciones detalles; es inútil sin su implementación y limita con la plataforma interna, pero es .NET, así que esperamos eso).
KeithS
Su respuesta definitivamente no carece de mérito. Sin embargo, puede haber tecnologías que ayuden en el uso de este patrón. El hecho de que no haya una implementación unificada de la funcionalidad del servicio web para satisfacer todos los requisitos, no significa que no haya bibliotecas y paquetes en Java para ayudar en esta área. Sin embargo, editaré mi pregunta para que quede más claro. Gracias.
smp7d
0

OpeBBS (Open BlackBoard System) parece una implementación de Java para admitir el uso del patrón Blackboard.

Desde su sitio web :

OpenBBS es un sistema de pizarra abierto y extensible para el desarrollo de flujos de trabajo flexibles. La flexibilidad se logra mediante la adopción del patrón de pizarra. OpenBBS es modular e integrable, lo que lo convierte en una solución ligera para flujos de trabajo.

La fuente, jar y javadoc se pueden encontrar en Sourceforge . El Javadoc parece mencionar muchas de las clases que esperaría (Blackboard, BlackboardControl, ControlPlan, KnowledgeSource, ...).

El único inconveniente es que la última versión (¿y única?) Parece ser de 2007.

Wouter
fuente