[ 
https://issues.apache.org/jira/browse/WICKET-1862?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Willis Blackburn reopened WICKET-1862:
--------------------------------------


If it has to be this way, then I think that there could be a better 
implementation.  Regardless of memory considerations, the code that manipulates 
the object array seems quite complex for what it does.  How about an interface 
IComponentExtras that declares several methods:

    IModel getModel()
    MetaData[] getMetaData()
    IBehavior[] getBehaviors()

There could two implementations, one that just has a model, and one that all 
three fields.  Component has a reference to an instance of the interface, which 
can be null.

The interface also has methods to add a Model, Behavior, etc. that return a 
reference to the interface.  If the current implementation doesn't have a field 
for whatever is being added, then it transforms itself into an implementation 
that does.

    IComponentExtras addModel(IModel model)
    IComponentExtras addMetaData ...

This strategy would be easier to understand and better-typed, and could be 
extended to support other infrequently-used "extras."  You could even provide a 
way to use a single IComponentExtras instance across multiple components 
(SharedComponentExtras or whatever), offering potentially greater memory 
savings.



> Please consider backing out changes to Component that merged dissimilar 
> objects into an Object[]
> ------------------------------------------------------------------------------------------------
>
>                 Key: WICKET-1862
>                 URL: https://issues.apache.org/jira/browse/WICKET-1862
>             Project: Wicket
>          Issue Type: Improvement
>          Components: wicket
>    Affects Versions: 1.3.4
>            Reporter: Willis Blackburn
>            Priority: Minor
>
> In Wicket 1.2, the members of the Component class were pretty straightforward.
> But in 1.3, three fields, including the model, have been merged into a single 
> Object[], and there are new methods called data_get, data_set, data_length, 
> data_add, data_remove, and data_insert, to deal with the array.
> I cannot determine from the source code why this was done, but it does not 
> seem like a change for the better.  The Component class is now very 
> confusing, and the change has also made working with any Component subclass 
> (in other words, practically every Wicket class!) in the debugger more 
> difficult.  I think that when three fields that used to be accessed in a 
> simple and straightforward manner are replaced by 160 lines of code, there 
> needs to be some very compelling reason.
> Maybe the motivation was to reduce the memory footprint of a Component 
> instance that does not have any model, behaviors, or metadata, or maybe one 
> that just has one of the three?  If so, is that really so compelling?  Is the 
> memory footprint that large?  Are users suffering from problems that have 
> been addressed by this solution?  In the context of the memory usage of a 
> typical webapp, saving something like 8 bytes per Component instance does not 
> seem like that much.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to