Niclas, Rickard,

I feel this as smth brillant. No more complex migration logic, UnitOfWork 
defining Commands and Events recording and delegating their processing to the 
domain ... I simply could not have thought about it ! :-)

Paul, waiting for more news on this side of the Qi (4J!)


Le mercredi 22 juillet 2009 11:53:21, Rickard Öberg a écrit :
> Niclas Hedhman wrote:
> > Rickard and I had a fruitful brainstorm sessions yesterday, and I
> > thought he would post information about the result.
>
> I was in the process of posting it, but was awaiting responses from the
> DDD mailing list as I posted there first. Oh well.
>
> > So, what are we saying?
> > With a correct setup of Event (or Command) recording, it is possible
> > to restore the Entity Store state. If you use the suggested
> > event/command system, it is recommended that you consider the
> > EntityStore a "snapshot" of the current state, and the real state is
> > recorded as a sequence of events in the domain model. Hence, the
> > "snapshot" may be zapped, playback the event log and you will have the
> > EntityStore snapshot back with same values.
>
> The essence here is that the data snapshot of your model is not the key
> value. Whenever you change the model, you would typically perform data
> migration, and sometimes this is possible, but in any non-trivial case
> it is simply not possible at all.
>
> As an example, that I posted on the DDD list: if I have an Organization
> entity which I can call a command to do "newProject", then if the
> command succeeds it will result in the event "projectCreated(id:1234,
> org:5678)" to be created. In v1 of the model this might add the new
> Project to a ManyAssociation in the Organization, so that we can list
> Projects of an Organization. In v2 of the model we might introduce a
> backpointer from Project to Organization. In v3 of the model we might
> add a counter in the Organization of how many projects are available.
> And in v4 the counter might be split into one counter for active
> projects and another for completed projects.
>
> All of these changes would be more or less impossible to do using
> traditional data migration (i.e. alter table-style), since they involve
> domain rules that have changed significantly. However, if we store the
> event "projectCreated(id:1234,org:5678)" then we can simply replay this
> against the model, and the v4 domain model will create the appropriate
> state that we need. All we had to do was throw away the database and
> replay the events. At no point do we have to be afraid of making
> "radical changes" or create "migration schemas" or somesuch. As long as
> the events can be consumed by the new model it will "just work".
>
> This does require that event logs are stored from day one of the system,
> and can be replayed later on. This might involve a lot of data after a
> couple of years running. But, I think this can be handled through
> archival rules in many cases. So, instead of creating migration scripts
> we would create rules for filtering out what events we need to keep in
> order to be able to recreate the system. This should be a lot simpler
> than trying to make a generic data migration API that won't handle
> anything but the simplest cases anyway.
>
> That's the general idea. Any thoughts on this?
>
> /Rickard
>
>
> _______________________________________________
> qi4j-dev mailing list
> [email protected]
> http://lists.ops4j.org/mailman/listinfo/qi4j-dev


_______________________________________________
qi4j-dev mailing list
[email protected]
http://lists.ops4j.org/mailman/listinfo/qi4j-dev

Reply via email to