Subscribing
The subscribing module is composed of a set of interdependent objects
(MessageBoard
,
EventItem
,
Subscription
and
MessageHandler
)
to assist with subscribing to producers based on the “blackboard”
pattern. The central object is the
MessageBoard
that
holds items generated from events. These events are the result of
subscriptions
(Subscription
)
placed on a producer
(Producer
) object.
When a producer generates an event due to a subscription, the event is
packaged within an
EventItem
object
before posted to the
MessageBoard
.
The EventItem
contains both the event data as well as the necessary objects to handle
the data:
Subscription
: in case the event should cause the subscription to be removed
MessageHandler
: for conveniently tying specific instructions to handler events from a subscription
Basic Domain Model
The diagram below explains the concept by means of a basic UML domain model.
A Messageboard gets populated by events as a consequence of Subscriptions on Producers producing new events. For each event, a means of handling it (or consuming of the event) is provided in the form of a Handler. The handler could be for example something that checks the event value against an expected order of events and unsubscribes a subscription when a specific condition is met. The Subscription object ties therefore not only a subscription to a Producer, but also a Handler to the Subscription.
Basic Design
The subscribing
module defines a set of
interdependencies and relationships on abstract classes as a framework
for resting the implementation of these classes. In order to provide the
client software with maximum flexibility, a variety of ways is provided
for calling and acting upon these classes. However, care should be taken
to prevent circular dependencies. The basic structure is depicted as UML
diagram below:
This framework is then used to create the actual implementations of the classes as depicted in the diagram below: