Hi
@janasoft: This mapping is so cool, it's exactly how I visualize it in my head

How do you do that?
This way I try to understand the flow of the program. For example, I found easy to understand the observer framework.
But my handicap is that I've never worked with interfaces and, for now, it's very difficult for me to imagine how to work with them, But I'm trying hard and I guess I'll get my head clear at some moment.
Just take it easy, these are the 'nice' interfaces, where you don't have to wrestle the refcounting and automatic memorymanagement. I like the corba interfaces, because they are exactly what they seem to be, a contract.
Look at the IView, it's never used, but when a form or some object implements this interface, I know that I can work with it. When you work with interfaces, you don't care how they are implemented.
They provide a lot of freedom.
Why do yo use a function (Str2Pch) to do this "Result:= pchar(aStr)" or the opposite?
Tihi, because I'm too lazy to allocate memory for a pchar to send to 'the other side' and then remember to deallocate mem again... This way I can do xx.Provider.NotifySubscribers(prStatus,nil,str2pch('Hello World'));
the compiler doesn't allow me to do: (prStatus,nil,pchar('Hello World')); because a pchar doesn't allocate memory, you can take the address of.
In TfrmMainView.set_Presenter yo use 'fPresenter:= TPresenter(aValue.Obj)'. Like fPresenter and aValue are of tipe TPresenter, couldn't it be written fPresenter:= aValue?
Look closer my friend, aValue is of type 'IPresenter' and you can't typecast by assignment backwards with interfaces(they don't implement anything), thus all my interfaces surfaces the underlying object in the function 'Obj' and that you /can/ typecast directly

Me Likey

I'm still hooked on the masterclass
Glad to hear that, makes it all worthwhile

Regards Benny