I'm new to the CQRS and eventual consistency models, so forgive me if this is a stupid question.
Given that I'm just getting started, I have a local in memory CommandBus and EventPublisher. My events are persisted to a RavenDB database for replay purposes, but events are published and handlers are invoked in locally (not queued externally via NServiceBus et al). The EventPublisher does publish events asynchronously (a la Task.Factory.StartNew).
Sometimes my events have dependencies (eg. the OrderReceived event must be processed into the ReadModel before the OrderShipmentStatusUpdated event can be correctly processed into the ReadModel).
How can I handle this kind of scenario? Using Sagas? How would one use Sagas in a simple in memory model like described above? Is it considered acceptable to "defer" an event (perhaps mark it as deferred and simply try to reprocess all deferred events "once in a while")?
What are some strategies for dealing with this?
Thank you.