¿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/
Respuestas:
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).
fuente
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).
fuente
OpeBBS (Open BlackBoard System) parece una implementación de Java para admitir el uso del patrón Blackboard.
Desde su sitio web :
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.
fuente