My understand is that the value of visitor is: have simple data
structures and code/attach what is done on the data structure using
visitors.
This may seem odd given that one should have operations close to data
structure but it turns out very useful esp. if there are classes of
operations done on number of data structures. Each class of operations
becomes one visitor, making operation addition easier.
So as an example - take 2 classes of operations - render to html to
render to pdf on same set of data structures X, Y, Z.
In visitor world one would write two visitors and make X,Y, Z
visitable(i.e. have accept method)
If methods were close to datastructures, one would write 2 types of
rendering within class representing X,Y,Z
Having one visitor per rendering has the benefit that all the rendering
code is in one visitor implementaion. This makes it easy to
refactor/reuse. I have seen code get cleaned up a lot when using visitors.
I am not sure how this would apply to ofbiz code.. but it seems that
proposal intent is to take things like
Appendable writer, ScreenStringRenderer screenStringRenderer out of
widget/screen code.
Visitor will have these and access to datastructure (on acceptance of
visitor by visitable class e.g. ModelScreenWidget) and will do right
string appending.
hope this was useful.
harmeet