Hi,
yes, an Aggregate/Saga pair may help here. However, another solution is to make your models time-aware.
Let’s say that today, you receive a notification that my address changed 2 weeks ago. The event is inserted with today’s timestamp, as the registration happened today. However, the “as-of” date of the change is 2 weeks ago. Now, if I want to know: what was my address last week, it should give me the new (correct) address. However, if the questions is: what did I think my address was last week, seen from what we knew yesterday, it would still be the old (incorrect, as we know now) address.
Basically, it means the entries in your model will have some record of validity. If you want to know your point of view at a certain date, simply “replay” events up to that date, and check the model for the item with the correct validity.
Sagas are very useful when it comes to planning ahead. For example, I register the fact that I will have a new address in 2 weeks time. That event takes place now (don’t schedule this!!), but the as-of date is two weeks from now. In certain cases, it may be desired to get a notification that a planned change has actually occurred. This is where a Saga could do some work: keep track of the next upcoming change and scheduling an event for that. This type of event doesn’t actually need to change any aggregate state. In the end, nothing changed in the system. It’s merely a “reminder” of a change already made some time in the past.
Hope this helps.
Cheers,
Allard