[Perl-widget-developer] Structure of Widget Base classes
Status: Alpha
Brought to you by:
spadkins
From: Cees H. <ce...@si...> - 2001-06-05 03:59:17
|
I have a concern with the current structure of the base classes. Currently the way I see it, the structure is as follows Widget::Base - base class for all widgets Widget::HTML::Base - base class for all HTML widgets (inherits Widget::Base) Widget::HTML::Select - a widget class (inherits from Widget::HTML::Base) Now if we add WML we would get the following extra classes Widget::WML::Base - base class for all HTML widgets (inherits Widget::Base) Widget::WML::Select - a widget class (inherits from Widget::HTML::Base) My concern here is that there is no sharing of code between Widget::HTML::Select and Widget::WML::Select besides the Widget::Base and Widget::HTML::Base. I think there should be a base class for Select widgets that the HTML and WML Select widgets can inherit from. Otherwise we will be duplicating a tonne of code between the different interfaces. Essentially, I think we have our Base class structure backwards. What we need to think about is what similarities and differences there will be between the different interfaces. The only method that should be different in a Widget is the method that renders the actual widget. Everything else will most likely be the same. To fit a Widget::Select baseclass into the current structure would require multiple inheritance, and I don't know if that is such a good idea. What if we used the following structure: Widget::Base - base class for all widgets Widget::Select - a generic dropdown box widget (inherits from Widget::Base) Widget::HTML::Base - a base class for HTML widgets (doesn't inherit) Widget::HTML::Select - a display class for Select box (inherits from Widget::HTML::Base) The Widget::Select object can instantiate the correct display object from one of the interfaces once it knows (from the config file) which interface we are displaying to. It can choose to use Widget::HTML::Select or Widget::WML::Select depending on the requirements. Does anyone have any other ideas or comments on the implications of this? I haven't thought this out completely yet, but I wanted to throw it out before we got too deep into the coding. -- Cees Hek |