simple event sourcing interface and implementations