A minimal event sourcing framework.
use EventStore::Tiny;
my $store = EventStore::Tiny->new;
# Register event type
$store->register_event(UserAdded => sub ($state, $data) {
# Use $data to inject the new user into the given $state
$state->{users}{$data->{id}} = {
name => $data->{name},
};
});
# ...
# Store an event instance represented by type and data
$store->store_event(UserAdded => {id => 17, name => 'Bob'});
# ...
# Work with the current state snapshot generated by event application
say 'His name is ' . $store->snapshot->state->{users}{17}{name}; # Bob
In Event Sourcing, the state of a system is calculated as the application of a stream of events representing each change of the system. This framework is a minimal approach to use these mechanics in simple perl systems.
- Flexible snapshots (high-resolution timestamps) and event substreams
- Customizable event logging
- Simple storage solution for events in the file system
- Transparent snapshot caching mechanism to improve performance
- See the module's POD (EventStore::Tiny on MetaCPAN) for details.
- See Tamagotchi.pm and tamagotchi.t for a non-trivial demo.
Copyright (c) 2018-2021 Mirko Westermeier (@memowe, mirko@westermeier.de)
Released under the MIT License (see LICENSE.txt).