Nowoczesna implementacja Java Blackboard Pattern?

11

Czy jest miejsce na praktyczną, nowoczesną aplikację w Java of the Blackboard Pattern opisaną w „The Pragmatic Programmer” ? Czy jest jakaś konkretna biblioteka, która próbuje pomóc w realizacji tej koncepcji? Jaki jest ogólny konsensus w sprawie tego wzorca w obecnej społeczności oprogramowania (szczególnie Java)?

Choć pomysł jest intrygujący, mam wrażenie, że ta część książki może być nieaktualna.

Jeśli nie znasz tej koncepcji: http://flylib.com/books/en/1.315.1.55/1/

smp7d
źródło
Może i chciałbym to sprawdzić: stackoverflow.com/questions/1204667/…
Steven Evers
Pierwszy link w pytaniu jest zepsuty. Drugi to długi artykuł, który omawia kilka innych wzorów, a następnie wymienia Tablice jako powiązane, ale nic o nich nie mówi. Czy ktoś, kto zna ten termin, może edytować pytanie i dodać krótką definicję lub przykład?
Jules
@Jules Niektóre odczyty: flylib.com/books/en/1.315.1.56/1 i en.wikipedia.org/wiki/Blackboard_system
TEN UŻYTKOWNIK POTRZEBUJE POMOCY

Odpowiedzi:

6

Moim zdaniem wiele współczesnych platform Dependency Injection jest mniej więcej implementacją wzorca tablicy dla architektury aplikacji. W szczególności Google Guice pozwala uzyskać określone wystąpienia obiektu z „Wtryskiwacza” (lub tablicy, jak chcesz to nazwać), dodając adnotacje do obiektów, które tworzy na wiele sposobów (w tym według nazwy przy użyciu adnotacji @Named) . Pozwala także różnym modułom współpracować przy udostępnianiu usług wtryskiwaczowi (tablicy).

Wiosna jest podobna, każdy kontekstowy plik XML (na przykład) może przyczyniać się i wykorzystywać obiekty z kontekstu Spring (tablica).

OSGi i rejestr usług jest kolejnym przykładem implementacji tablicy. Oto opis, w jaki sposób OSGi używa i obsługuje wzorzec tablicy do odwracania kontroli obsługi zdarzeń w systemach opartych na OSGi

Oto artykuł instruktażowy na temat związku między modułami dynamicznymi Spring, OSGi i wzorem tablicy (strona 51).

Z mojego doświadczenia wynika, że ​​w szczególności Guice jest również bardzo wydajny do wspierania własnej implementacji wzoru tablicy. Jeśli większość twoich przedmiotów jest wstrzykiwana z Guice Injector (tablicy), łatwo jest wstrzyknąć je z każdą inną tablicą, jakiej potrzebuje dana klasa. Możesz więc uruchomić konkretną białą tablicę (np. Zawierającą fakty na temat Twojej domeny) za pomocą białej tablicy architektury aplikacji Guice. (Możesz zrobić podobnie z Springem, OSGi lub wieloma innymi, chociaż może nie tak bezpośrednio).

Flamingpenguin
źródło
3
W przypadku, gdy ktoś się nad tym zastanawia, tablice i tablice wydają się być terminami wymiennymi. Tablice nazywają je Barbara Liskov, ale wydaje się, że termin ten został (przeważnie) nieużywany na rzecz tablic.
Wouter
2

Cóż, wzorce projektowe są dokładnie takie; wzorce koncepcyjne do opracowania algorytmów, niekoniecznie implementacje wspomnianego wzoru, które działają w ogólnym przypadku. W związku z tym biblioteki, które zapewniają funkcjonalność „wbudowaną”, mogą wykorzystywać określony wzorzec, a nawet być świetnym przykładem użycia tego wzorca, ale nie są wzorcem. Nie potrzebujesz klasy StrategyProvider, którą można skonfigurować, aby spełnić wszelkie potrzeby, wystarczy zdefiniować zestaw klas i ustrukturyzować je tak, aby były zgodne ze wzorcem strategii.

Pomysł jest intrygujący. Wygląda na to, że sprawdziłby się dobrze w organizacji dokumentów, schemacie blokowym, sieciach społecznościowych itp. Jednak jego implementacja w każdym z tych scenariuszy byłaby zupełnie inna i chociaż nakładanie się może być niemożliwe, stworzenie jednej implementacji spełniającej wymagania wszystkich tych scenariuszy, bez wykazywania „efektu wewnętrznej platformy” (obiekt / biblioteka / aplikacja jest tak złożona i konfigurowalna, że ​​w zasadzie staje się reimplementacją IDE użytego do jej zbudowania).

KeithS
źródło
1
Myślę, że retaggery stały się trochę nadgorliwe. Uznałbym to za bardziej wzór architektoniczny niż wzór projektowy. Bardziej zgodny z SOA niż z wzorem fabrycznym. Może nie powinienem był używać słowa „wzorzec”
smp7d
Myślę, że moja odpowiedź stoi; Tablica to „wzorzec” używany do tworzenia implementacji specyficznych dla wymagań, a sam wzorzec nie jest przeznaczony do implementacji ogólnego przypadku. Twój przykład SOA to wciąż tylko koncepcja; nie można zbudować znaczącego „silnika SOA”, nie wiedząc, jakie będzie jego zamierzone zastosowanie (WCF Microsoftu może być uważany za „silnik SOA”, ale tak naprawdę jest to architektura proxy, którą można zastosować w projekcie SOA w celu uproszczenia komunikacji szczegóły; jest bezużyteczny bez twojej implementacji i graniczy na wewnętrznej platformie, ale jest .NET, więc tego oczekujemy).
KeithS
Twoja odpowiedź zdecydowanie nie jest bez znaczenia. Mogą jednak istnieć technologie, które pomagają w stosowaniu tego wzorca. To, że nie ma ujednoliconej implementacji funkcjonalności usługi internetowej, która spełniałaby wszystkie wymagania, nie oznacza, że ​​nie ma bibliotek i pakietów w Javie, które mogłyby pomóc w tym obszarze. Niemniej jednak zmienię moje pytanie, aby było bardziej jasne. Dzięki.
smp7d,
0

OpeBBS (Open BlackBoard System) wygląda jak implementacja Java obsługująca użycie wzorca tablicy.

Z ich strony internetowej :

OpenBBS to otwarty i rozszerzalny system tablic do opracowywania elastycznych przepływów pracy. Elastyczność osiągnięto dzięki przyjęciu wzoru tablicy. OpenBBS jest modułowy i można go osadzać, co czyni go lekkim rozwiązaniem dla przepływów pracy.

Źródło, jar i javadoc można znaleźć na Sourceforge . Javadoc wydaje się wymieniać wiele klas, których można się spodziewać (Blackboard, BlackboardControl, ControlPlan, KnowledgeSource, ...).

Jedynym minusem jest to, że wydaje się, że najnowsza (i jedyna?) Wersja pochodzi z 2007 roku.

Wouter
źródło