Triển khai Java hiện đại của mẫu Blackboard?


11

Có chỗ cho một ứng dụng hiện đại thực tế trong Java của Mẫu bảng đen chi tiết trong "Lập trình viên thực dụng" không? Có thư viện cụ thể nào cố gắng hỗ trợ thực hiện khái niệm này không? Sự đồng thuận chung về mẫu này trong cộng đồng phần mềm hiện tại (đặc biệt là Java) là gì?

Mặc dù ý tưởng này rất hấp dẫn, tôi có cảm giác rằng phần này của cuốn sách có thể bị lỗi thời.

Trong trường hợp bạn không quen thuộc với khái niệm này: http://flylib.com/books/en/1.315.1.55/1/


Cũng có thể muốn kiểm tra điều này: stackoverflow.com/questions/1204667/ trộm
Steven Evers

Liên kết đầu tiên trong câu hỏi bị hỏng. Thứ hai là một bài viết dài đi sâu vào hợp lý trên một số mẫu khác, sau đó liệt kê Bảng đen có liên quan, nhưng không nói gì về chúng. Ai đó có thể quen thuộc với thuật ngữ xin vui lòng chỉnh sửa câu hỏi và thêm một định nghĩa hoặc ví dụ ngắn gọn?
Jules

Câu trả lời:


6

Ý kiến ​​của tôi là rất nhiều khung công tác Dependency Injection hiện đại ít nhiều là việc triển khai mẫu bảng trắng cho kiến ​​trúc ứng dụng. Google Guice nói riêng cho phép bạn lấy các phiên bản cụ thể của một đối tượng từ "In phun" (hoặc bảng trắng như bạn có thể gọi nó) bằng cách chú thích các đối tượng mà nó tạo ra theo một số cách (bao gồm cả tên bằng cách sử dụng chú thích @ Named) . Nó cũng cho phép các mô-đun khác nhau cộng tác trong việc đóng góp các dịch vụ cho In phun (bảng trắng).

Spring cũng tương tự, mỗi tệp XML bối cảnh (ví dụ) có thể đóng góp và sử dụng các đối tượng từ bối cảnh Spring (bảng trắng).

OSGi và đăng ký dịch vụ của nó là một ví dụ khác về việc triển khai bảng trắng. Dưới đây là mô tả về cách OSGi sử dụng và hỗ trợ mẫu bảng trắng để đảo ngược việc kiểm soát xử lý sự kiện trong các hệ thống dựa trên OSGi

Dưới đây là tài liệu hướng dẫn về mối quan hệ giữa các mô-đun động Spring, OSGi và mẫu bảng trắng (trang 51).

Kinh nghiệm của tôi là Guice nói riêng cũng rất mạnh mẽ để hỗ trợ bạn thực hiện mẫu bảng trắng. Nếu hầu hết các đối tượng của bạn đang được tiêm từ Guice In phun (bảng trắng) thì có thể dễ dàng tiêm chúng với bất kỳ bảng trắng nào khác mà một lớp cụ thể cần. Vì vậy, bạn có thể bootstrap một bảng trắng cụ thể (ví dụ: bảng chứa thông tin về miền của bạn) bằng cách sử dụng bảng trắng kiến ​​trúc ứng dụng Guice. (Bạn có thể làm tương tự với Spring, OSGi hoặc nhiều người khác nữa mặc dù có thể không trực tiếp như vậy).


3
Trong trường hợp bất cứ ai khác thắc mắc về điều này, Bảng trắng và bảng đen dường như là các thuật ngữ có thể hoán đổi cho nhau. Bảng trắng là những gì Barbara Liskov gọi chúng, nhưng thuật ngữ này dường như đã được sử dụng (phần lớn), sử dụng bảng đen.
Wouter

2

Vâng, các mẫu thiết kế là chính xác đó; các mẫu khái niệm cho sự phát triển của các thuật toán, không nhất thiết phải triển khai các mẫu đã nói hoạt động trong trường hợp chung. Do đó, các thư viện cung cấp chức năng "tích hợp" có thể sử dụng một mẫu cụ thể và thậm chí có thể là những ví dụ sáng chói về việc sử dụng mẫu đã nói, nhưng chúng không phải là mẫu. Bạn không cần một lớp StrategProvider có thể được cấu hình để đáp ứng bất kỳ nhu cầu nào, bạn chỉ cần định nghĩa một tập hợp các lớp và cấu trúc chúng theo mô hình Chiến lược.

Ý tưởng là hấp dẫn. Có vẻ như nó sẽ hoạt động tốt cho tổ chức tài liệu, biểu đồ dòng chảy, mạng xã hội, v.v. Tuy nhiên, việc triển khai trong mỗi kịch bản đó sẽ khá khác nhau và trong khi có sự chồng chéo thì không thể tạo ra một triển khai đáp ứng yêu cầu của tất cả các kịch bản này, mà không thể hiện "hiệu ứng nền tảng bên trong" (một đối tượng / thư viện / ứng dụng phức tạp và có thể định cấu hình đến mức về cơ bản nó trở thành một sự tái hiện của IDE được sử dụng để xây dựng nó).


1
Tôi nghĩ rằng các retaggers có một chút quá nhiệt tình. Tôi sẽ xem xét điều này nhiều hơn một mô hình kiến ​​trúc hơn là một mẫu thiết kế. Phù hợp hơn với SOA so với Mô hình nhà máy. Có lẽ tôi không nên sử dụng từ 'mẫu'
smp7d

Tôi nghĩ rằng câu trả lời của tôi đứng; Bảng đen là một "mẫu" được sử dụng để tạo các triển khai theo yêu cầu cụ thể và bản thân mẫu đó không có ý định thực hiện trường hợp chung. Ví dụ về SOA của bạn vẫn chỉ là một khái niệm; bạn không thể xây dựng một "công cụ SOA" có ý nghĩa mà không biết mục đích sử dụng sẽ là gì (WCF của Microsoft có thể được coi là "công cụ SOA", nhưng thực sự đó là một kiến ​​trúc proxy có thể được áp dụng cho thiết kế SOA để đơn giản hóa truyền thông chi tiết, nó vô dụng nếu không có sự triển khai và biên giới của bạn trên nền tảng bên trong, nhưng đó là .NET nên chúng tôi mong đợi điều đó).
KeithS

Câu trả lời của bạn chắc chắn không phải không có công đức. Tuy nhiên, có thể có các công nghệ hỗ trợ việc sử dụng mẫu này. Chỉ vì không có triển khai thống nhất chức năng dịch vụ web để đáp ứng tất cả các yêu cầu, không có nghĩa là không có thư viện và gói trong Java để trợ giúp trong lĩnh vực này. Tuy nhiên, tôi sẽ chỉnh sửa câu hỏi của mình để làm cho nó rõ ràng hơn. Cảm ơn.
smp7d

0

OpeBBS (Open BlackBoard System) trông giống như một triển khai Java để hỗ trợ việc sử dụng mẫu Blackboard.

Từ trang web của họ :

OpenBBS là một hệ thống bảng đen mở và có thể mở rộng để phát triển các quy trình công việc linh hoạt. Tính linh hoạt đạt được thông qua việc áp dụng mẫu bảng đen. OpenBBS là mô-đun và có thể nhúng, làm cho nó trở thành một giải pháp nhẹ nhàng cho quy trình công việc.

Nguồn, jar và javadoc có thể được tìm thấy trên Sourceforge . Javadoc dường như đề cập đến hầu hết các lớp mà bạn mong đợi (Blackboard, BlackboardControl, ControlPlan, KnowledgeSource, ...).

Nhược điểm duy nhất là nó là bản phát hành mới nhất (và duy nhất?) Dường như là từ năm 2007.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.