ITEM 2.
Refactoring concrete classes (e.g., WikiEngine) into interfaces whenever possible, and supplementing them with factory interfaces if warranted (e.g., interface WikiEngineFactory).

CLARIFICATION via discussion: extraction would be done with the understanding that careful consideration would be given to the methods extracted, and to the classes refactored.

Murray: +1
Andrew: +1
Harry: +1
Janne: +0.5 (I think: please let me know if I have misinterpreted)

I voted -1 against the proposition as written, because I interpret calls for votes *literally*.

Note that according to Apache rules, in any code change votes a binding -1 constitutes a veto. So, this one does not pass.

Conclusion: this vote passes, unless I've got Janne's vote wrong. I'd recommend we move forward with this carefully, and agree on changes via group consensus as we go. Janne's comments are well- taken: blind refactoring is not the goal here.

Craig's point of proper subclassing is a good one and needs to be taken into account. It might make sense to look whether we can create good abstract subclasses for certain objects (for example, WikiPage actually comes to mind as a good candidate for an abstract base class, since it's mostly an accessor class). WikiContext is something which probably works well as an interface, but WikiEngine might also be a good base class.

What I am really aiming is that someone who embeds JSPWiki does not have to start a WikiEngine to get the benefit of JSPWiki rendering engine (there is an open issue for this), but simply provide their own implementations for certain classes (and not low-level ones like Providers, which is the case right now). This means that we need to have either sane default implementations or possibly interfaces for WikiEngine, WikiPage and WikiContext (and redesign some things for PluginManager and VariableManager).

However, this needs a lot more thinking, and we can't just do it without proper discussion on this subject.

/Janne

Reply via email to