The VLINGO/LATTICE component provides tooling for reactive Domain-Driven Design projects that are highly concurrent. The tools of the component include compute grid, actor caching, spaces, cross-node cluster messaging, publish-subscribe, CQRS, and Event Sourcing support.
Supports three styles of persistence, including Object, Stateful, and Sourced.
Command-Query Responsibility Segregation uses two models per Bounded Context (application or service), the Command Model and the Query Model, otherwise known as the Read Model and the Write Model, respectively.
Understanding the Command-Query Responsibility Segregation pattern.
Provides an API for distributed computations and data processing across multiple nodes in a cluster. Supports distributed parallel processing by sending computational execution requests to actors on any node in a cluster with the potential to receive results in return.
Provides an abstraction over Publish-Subscribe messaging exchanges or topics. This is a means to publish messages to exchanges/topics inside or outside your current application/service, and to subscribe to such messages. Provides translators from internal to external message types, and from external to internal message types.
Long-running processes that manage complex, coarse-grained, business transactions, must be managed through every step until completion. These tools assist in managing such processes whether by means of object persistence, stateful command models, or sourced with commands.
How to project state, Domain Events, and other Source types into a CQRS Query Model.
Use message-driven command routing to handlers that are responsible for modifying the domain model, which may be segregated as a Command Model.
The following types are defined in the VLINGO/LATTICE component and commonly used with domain-driven designed services.
A abstract type used to model a record of fact about an important business occurrence in the domain model
A abstract type used to model a record of fact about an important business occurrence in the domain model and that has an identity associated with it, which can be used for correlation
An abstract type used to create an Event Sourced entity that is backed by a persistent Journal
An abstract type used to model a record of an imperative directive to carry out a business operation
An abstract type used to create an Command Sourced entity
An abstract type used to model an entity that is backed by object-relational persistence
An abstract type used to model an entity that is backed by Key-Value persistence
An interface implemented by a component that orchestrates the steps necessary to complete a composite task
An interface implemented by a component that serves to project Command Model state onto the Query Model
An interface used to abstract the Command Model data projected onto the Query Model
An abstraction over Publish-Subscribe messaging exchanges and topics
A means of asynchronous message-driven command routing to handlers that are responsible for modifying the domain model
These types are discussed in detail throughout the subsections of this chapter.