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