where can I find out about the visitor model

Adrian Crum sent the following on 11/26/2008 6:05 PM:
> I would like to work on cleaning up the screen widget Java code. Here are 
> some of my ideas:
> 
> 1. The screen widget model classes are trying to be too many things. As a 
> result, they contain some messy and scary code. I'd like to see the model 
> widget become more of a data structure, and move the rendering code into the 
> rendering classes.
> 
> 2. Use a true visitor pattern in the model widgets. The current pattern is 
> what I would call "befuddled double dispatch with baggage." Methods like
> 
> public void renderWidgetString(Appendable writer, Map<String, Object> 
> context, ScreenStringRenderer screenStringRenderer)
> 
> would become
> 
> public void accept(ScreenWidgetVisitor visitor).
> 
> Rendering classes would implement the ScreenWidgetVisitor interface. The 
> model widgets won't need to be concerned with writers, contexts, or any other 
> messy details.
> 
> 3. Convert the existing artifact gathering code to a screen widget visitor. 
> That would get the artifact gathering code out of the model widgets and put 
> it where it belongs. It would probably simplify the artifact gathering code 
> as well.
> 
> Once these steps are completed, the model widget classes will be simple 
> immutable data structures. The only code most of the model classes will have 
> is a constructor and the accept method.
> 
> The rendering code will be simplified, since there will be better separation 
> of concerns.
> 
> I will probably start off with #1 - move the rendering code from the model 
> classes to the rendering classes. Once the dust settles from that, I will 
> introduce the visitor interfaces and visitor classes. The existing model 
> methods will be deprecated. The model classes will be bloated while they 
> support both patterns. When the time is right we can remove the deprecated 
> methods and we'll have lean, well structured screen widget code.
> 
> What do you think?
> 
> -Adrian
> 
> 
> 
>       
> 
> 

Reply via email to