Hello
2011/7/1 Janko Mivšek <[email protected]>
>
> S, Philippe Marschall piše:
> > first := self askForFirstObject.
> > second := self askForSecondObject.
> > (first aSelector: second)
> > ifTrue: [ self something ]
> > ifFalse: [ self somethingElse ]
>
>
> Asynchronous way would be something like:
>
> self askForFirstObject
> onAnswerDo: [:first |
> self askForSecondObject
> onAnswerDo: [:second |
> (first aSelector: second)
> ifTrue: [self something]
> ifFalse: [self somethingElse]
> ]
> ]
>
Ok. But how you rewrite more complex control flow example:
first := self askForFirstObject.
second := self askForSecondObject.
(first aSelector: second)
ifTrue: [ target := self askForThirdObject]
ifFalse: [ target := self askForLastObject ].
self saveToDB: target.
self show: target.
self show: first.
self show: second.
Maybe like this:
self askForFirstObject
onAnswerDo: [:first |
self askForSecondObject
onAnswerDo: [:second |
(first aSelector: second)
ifTrue: [self askForThirdObject
onAnswerDo: [:target |
self saveToDB: target.
self show: target.
self show: first.
self show: second. ]
ifFalse: [self askForLastObject
onAnswerDo: [:target |
self saveToDB: target.
self show: target.
self show: first.
self show: second]
]
].
Are you really like this code? I think no.
And when interraction logic become more difficult you will get more and more
complex fragile code.
I think continuations based synch approach should be core of any UI
framework (not just web).
But web browsers can't do this :(
This surely looks less nice than your example but it is closer to event
>
driven nature of browser and web apps. And because such workflow is
> actually rare, it is IMHO not worth such a big expense in framework
> complexity.
>
Best regards
> Janko
>
>
> --
> Janko Mivšek
> Aida/Web
> Smalltalk Web Application Server
> http://www.aidaweb.si
>
>