Есть ли место для практического современного применения в Java шаблона Blackboard, подробно описанного в «Прагматическом программисте» ? Есть ли какая-то конкретная библиотека, которая пытается помочь в реализации этой концепции? Каково общее согласие по этому шаблону в современном сообществе разработчиков программного обеспечения (особенно Java)?
Хотя идея интригует, у меня есть ощущение, что эта часть книги может быть устаревшей.
Если вы не знакомы с этой концепцией: http://flylib.com/books/en/1.315.1.55/1/
Ответы:
Мое мнение таково, что многие современные фреймворки Dependency Injection более или менее являются реализацией шаблона доски для архитектуры приложений. В частности, Google Guice позволяет получать конкретные экземпляры объекта из «Инжектора» (или доски, как вы могли бы ее назвать), аннотируя создаваемые им объекты различными способами (в том числе по имени с помощью аннотации @Named). , Это также позволяет различным модулям сотрудничать в предоставлении услуг для Инжектора (белая доска).
Spring похож, каждый XML-файл контекста (например) может вносить вклад и использовать объекты из контекста Spring (белая доска).
OSGi и его сервисный реестр - еще один пример реализации доски. Вот описание того, как OSGi использует и поддерживает шаблон доски для инверсии управления обработкой событий в системах на основе OSGi.
Вот учебное пособие о взаимосвязи между динамическими модулями Spring, OSGi и шаблоном доски (стр. 51).
Мой опыт показывает, что Guice, в частности, также очень силен для поддержки вашей собственной реализации шаблона доски. Если большинство ваших объектов вводятся с помощью Guice Injector (интерактивной доски), тогда их легко внедрить с помощью любой другой интерактивной доски, которая нужна определенному классу. Таким образом, вы можете загрузить определенную доску (например, содержащую факты о вашем домене), используя доску архитектуры приложения Guice. (Вы можете сделать то же самое с Spring, OSGi или многими другими, хотя, возможно, не так прямо).
источник
Что ж, шаблоны дизайна именно такие; концептуальные паттерны для разработки алгоритмов, не обязательно реализации указанного паттерна, которые работают в общем случае. Таким образом, библиотеки, которые предоставляют «встроенные» функциональные возможности, могут использовать конкретный шаблон и даже могут быть яркими примерами использования указанного шаблона, но они не являются шаблоном THE. Вам не нужен класс StrategyProvider, который можно настроить для удовлетворения любых потребностей, вы просто определяете набор классов и структурируете их в соответствии с шаблоном Strategy.
Идея интригующая. Похоже, что это будет хорошо работать для организации документов, создания диаграмм, социальных сетей и т. Д. Однако, его реализация в каждом из этих сценариев будет совершенно разной, и, хотя есть совпадение, может быть невозможно создать одну реализацию, которая соответствует требования всех этих сценариев, без проявления «эффекта внутренней платформы» (объект / библиотека / приложение, настолько сложный и настраиваемый, что он в основном становится повторной реализацией среды IDE, использованной для его создания).
источник
OpeBBS (открытая система BlackBoard) выглядит как реализация Java для поддержки использования шаблона Blackboard.
С их сайта :
Источник, jar и javadoc можно найти в Sourceforge . Javadoc, кажется, упоминает большую часть классов, которые вы ожидаете (Blackboard, BlackboardControl, ControlPlan, KnowledgeSource, ...).
Единственным недостатком является то, что это последний (и единственный?) Релиз, кажется, с 2007 года.
источник