Overview
An event is a record that something of interest happened to the object identified by the Aggregates (Aggregate roots).

Events are stored in order of occurrence and this allows for the most powerful aspects of event sourcing - the ability to recreate the state of your object as it was at any given point in time by replaying the events into it. (These views of the state of an aggregate when events are applied are generated by Projections).

Each event can only be linked to one aggregate identifier.

Each event type must have an unique name of be uniquely identifiable.

Behind the scenes a sequence and timestamp property are added to indicate the order in which events were recorded and the relation between this and real-world time.

Implementation
Events are defined by a marker interface that specifies the aggregate root type that this event applies to. The event class is marked as "NotInheritable" (sealed) in order to keep the event model clean.

An event is a lightweight class (POCO) that holds the properties recorded about the event that occurred.

Naming convention
The event name should be a past tense verb or verb phrase, for example "Registered", "AddressChanged", "Debitted" etc. There is no need to include the name of the aggregate in the event name.

Last edited Jun 13, 2015 at 11:25 AM by Merrion, version 2