Pronounced "See Queue," SeekU is a micro framework for making CQRS + Event Sourcing enjoyable.
CQRS is simply the creation of two objects where there was previously only one. The separation occurs based upon whether the methods are a command or a query.
SeekU helps solve the complexities of building a distributed, event-driven system using CQRS and Event Sourcing.
At it's most basic, SeekU is a series of in-memory providers that marshal events through your object model.
Each layer of SeekU can be replaced with your own provider. It's a trivial task to override the defaults in favor of using an Azure Service Bus for event publishing and MongoDB for Snapshot storage, for example.
The default command handler send commands into your domain object to change the state of your model. By default this is in-memory, however it can easily be replaced with NServiceBus, Azure Service Bus, RabbitMQ, or any other means of sending messages across application layers.
Like command handling, the default event handler broadcasts events to subscribers. Similarly, events can be sent across boundaries via Azure Service Bus, NServiceBus, etc...
SeekU is extremely flexible in terms of storing a history of domain events. Currently there are providers for SQL Server, MongoDB, Azure Table Storage, and flat JSON files. Creating your own storage provider is as simple as inheriting from a base class and implementing a pair of methods.
SeekU uses snapshots to help keep the process of loading domain objects as fast as possible. In situations where there are thousands of events in an object's history, loading each event can be time consuming. Snapshots provide a point in time where the state of the domain is saved and only new events need be applied.
Currently there are snapshot providers for SQL Server, MongoDB, Azure Blob Storage, and flat JSON files. Creating your own snapshot provider is as simple as inheriting from a base class and implementing a pair of methods.