The latest version of Magritte fixes the reported problem without
#becomeForward: or #doesNotUnderstand: tricks. The idea is simple, it
is a two step process:
1. The empty container description is registered in the cache.
2. The element descriptions are added to the container.
> Meta is a meta-description framework for VW, and there I
> implemented a placeholder that records everything that happens to
> it, and later on, replays all that on the actual object.
Due to its use of #doesNotUnderstand: you are screwed up as soon as
such an instance ends up in a debugger, database, tires to receive a
special selector ...
MessageRecorder requires some attention, but is not that worse.
Debugger sessions are fine, they get recorded and replayed later on,
but that does not hurt anyone. For persistency, it is very important
that MessageRecorders have a clearly defined lifetime in your design.
And that you double check if all recorders (including spawned
recorders) are stopped and got replaced when leaving the piece of
code that used them. The only thing I could not solve, was the case
when a spawned recorder is used a receiver of an ifThen.
In my opinion #doesNotUnderstand: simply does not scale for most of
such things, as I explained when describing MADynamicObject (what is
somehow similar, but less sophisticated).
It scales IMHO, but has a lot of very nasty pitfall. Therefor only
skilled engineers should use DNU or become.
SmallWiki, Magritte, Pier and Related Tools ...