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