On Sat 14 May 2011 10:12:09 PM MDT, Niclas Hedhman (JIRA) wrote:
> [ 
> http://issues.ops4j.org/browse/QI-301?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14197#action_14197
>  ] 
> 
> Niclas Hedhman commented on QI-301:
> -----------------------------------
> 
> I would like to suggest the name "NamedAssociation", since we are effectively 
> putting a name on to the association itself.
> 
>> Better support for "Entity Local" identities
>> --------------------------------------------
>>
>>                 Key: QI-301
>>                 URL: http://issues.ops4j.org/browse/QI-301
>>             Project: Qi4j
>>          Issue Type: New Feature
>>          Components: API, Core Runtime
>>    Affects Versions: 1.2
>>            Reporter: Niclas Hedhman
>>            Assignee: Rickard Öberg
>>             Fix For: Unknown
>>
>>
>> Currently it is possible to have design time defined "local identities" for 
>> referenced entities, simply as;
>> {code}
>> public interface Car
>> {
>>     Association<Tyre> frontRightTyre();
>> }
>> {code}
>> But if the list is not known at design time, things quickly becomes more 
>> troublesome (and potentially slower, depending on how one approaches it). 
>> One can either do a ManyAssociation;
>> {code}
>> public interface Family
>> {
>>     ManyAssociation<Child> kids();
>> }
>> {code}
>> and loop through, but if the numbers get very large one needs to start 
>> mangling with Identity composition
>> {code}
>> public interface CompanyDivision
>> {
>>     Property<Map<String,String>> employees();
>> }
>> {code}
>> where first String of local identity (within the company) maps to a global 
>> Identity of some non-obvious type. There is also the choice of using Query, 
>> but that kills performance in a big way.
>> I come across this on every front right now, and not happy with the Identity 
>> mangling approach, and would like to call for direct support in Qi4j.
>> Proposal;
>> At the user side of the equation, something like this should be possible;
>> {code}
>> public interface CompanyDivision
>> {
>>     KeydAssociation<Employee> employees();
>> }
>> {code}
>> And the KeydAssociation (better name is probably needed) interface would be 
>> something like this;
>> {code}
>> public interface KeydAssociation<T> extends Iterable<T>, AbstractAssociation
>> {
>>     void put( String key, T entity );
>>     T get( String key );
>>     int count();
>>     boolean containsKey( String key );
>>     boolean contains( T entity );
>>     Map<String, T> toMap();
>> }
>> {code}
>> This should then be supported at EntityStore level as well, similarly to 
>> ManyAssociation.

Any reason why NamedAssociation<T> does not include remove( T Entity )? 
I see that NamedAssociationInstance<T> includes the method, but the 
interface does not.

Regards,
Chris Chapman

_______________________________________________
qi4j-dev mailing list
[email protected]
http://lists.ops4j.org/mailman/listinfo/qi4j-dev

Reply via email to