What is a saga?
An independent component that reacts to domain events in a cross-aggregate, eventually consistent manner. Time can also be a trigger. Sagas are sometimes purely reactive, and sometimes represent workflows.
From an implementation perspective, a saga is a state machine that is driven forward by incoming events (which may come from many aggregates). Some states will have side effects, such as sending commands, talking to external web services, or sending emails.
Isn't a saga just leaked domain logic?
Sagas are doing things that no individual aggregate can sensibly do. Thus, it's not a logic leak since the logic didn't belong in an aggregate anyway. Furthremore, we're not breaking encapsulation in any way, since sagas operate with commands and events, which are part of the public API.
How can I make my saga react to events that did not happen?
The saga, besides reacting to domain events, can be "woken up" by recurrent
internal alarms. Implementing such alarms is easy. See
cron in Unix, for
How does the saga interact with the write side?
By sending commands to it.