On Thu, Aug 6, 2009 at 12:50, Asiri
Rathnayake<asiri.rathnayake(a)gmail.com> wrote:
Hi all,
While working on macro categories implementation I came across a small
problem that made me little uncomfortable with AbstractMacro API. I'm
writing this email just to make sure that I'm not making things worse in the
public API.
Currently AbstractMacro has 4 constructors:
* public AbstractMacro(String description);
* public AbstractMacro(String description, ContentDescriptor
contentDescriptor)
* public AbstractMacro(String description, Class< ? > parametersBeanClass)
* public AbstractMacro(String description, ContentDescriptor
contentDescriptor, Class< ? > parametersBeanClass)
Now, I wanted to introduce a MacroDescriptor::getDefaultCategory() method
and I also wanted to make this new parameter available in AbstractMacro
constructors (makes sense). Now the problem with this is, If I introduce an
optional 'defaultCategory' parameter into AbstractMacro, this will make the
total number of constructors 8. What will happen if someone wants to
introduce a MacroDescriptor::getIcon() method some time later?
One solution is to have setXXXX methods for those parameters instead. But
then a slight problem occurs where AbstractMacro needs to somehow call
setXXX methods on it's internal MacroDescriptor instance. It's not that we
can't cook comething up, but it's going to look hackish.
My question is, why do we have to make AbstractMacro constructors so simple?
Because we want to make as easy as possible to write and contribute macros :)
Can't we have these two constructors only?
* public AbstractMacro();
* public AbstractMacro(MacroDescriptor);
The problem with this approach is that a client will have to do little more
work like;
ContentDescriptor myContentDescriptor = new DefaultContentDescriptor("This
is my content", true);
MacroDescriptor myMacroDescriptor = new DefaultMacroDescriptor("This is my
macro", myContentDescriptor,
beanManager.getBeanDescriptor(MyParametersClass.Class))
super(myMacroDescriptor);
Even though this is too much of work, I think it will make the API more
extensible an clean.
This is only my opinion. I didn't want to drag this issue this far but I
just couldn't feel myself comfortable with the way I'm going to implement
the macro categories support.
Up to you.
Thanks.
- Asiri
_______________________________________________
devs mailing list
devs(a)xwiki.org
http://lists.xwiki.org/mailman/listinfo/devs
--
Thomas Mortagne