PluggableButtonMorph>>askBeforeChanging

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

PluggableButtonMorph>>askBeforeChanging

Igor Stasenko
As to me this is a good example of placing a decisive role into wrong place,
bloating the morph's protocol.

The 'askBeforeChanging' is used in #performAction
which asks the model , if it wants to change:
        askBeforeChanging ifTrue: [model okToChange ifFalse: [^ self]].

But why doing that, isn't model unable to send #okToChange in its own
action handling method?
i.e. if button does:
   model perform: actionSelector

where actionSelector == #foo,

what prevents a model to implement this method as:

foo
  self okToChange ifFalse: [ ^ self].
  self doSomething.

?

Or, even if model wants to do something without asking in one case,
but with asking in another,
what prevents it to implement:

#doSomething
and
#doSomethingIfOkToDoIt

and choose appropriate selector as action to a button(s)?

Or, if we look at it from different angle.
A button widget main role is to trigger some action.
The action could be anything: from very simple one up to complex, composite one.
And 'ask-before-change-then-do' is an example of composite action.
So, let button just trigger that composite action.
Why putting an action handling logic to the place where action having
completely abstract meaning?

--
Best regards,
Igor Stasenko AKA sig.