Login  Register

Management of #queryAll{Direction}Associations (complete one)

Posted by CyrilFerlicot on Oct 12, 2017; 8:55am
URL: https://forum.world.st/Management-of-queryAll-Direction-Associations-complete-one-tp4982897.html

Hi!

Sorry for my previous incomplete mail. I missclicked. Here is the full one:

I have some improvements I would like to make to Moose query and I
would like your approuval.

First. Currently there is:
- #queryAllOutgoing and #queryAllOutgoingAssociations to query all the
outgoing associations of the receiver
- #queryAllIncoming and #queryAllIncomingAssociations to query all the
incoming associations of the receiver

#queryAll{Direction} is based on the meta-model properties while
#queryAll{Direction}Associations seems to be more empirical.

See:

queryAllOutgoingAssociations
^ self queryStaticOutgoingAssociations
    addAll: self queryAllOutgoingInvocations;
    yourself

I propose two changes:
- Remove the empirical implementation to use only the one based on the
meta-model
- Deprecate #queryAllIncoming and #queryAllOutgoing. I think
#queryAllIncomingAssociations is a better name, but I can change my
mine if you have a different opinion on that.

Second. To query all the in/out associations with the method based on
the meta-models, there is the use of "FAMIXAssociation
withAllSubclassesDo:" to iterate on the associations and do the
queries for all of them.

I have three problems with that:
- This is not efficient. If an entity can have only 2 incoming
associations it will still try the queries for all the associations in
the image
- This has a role in the circular dependency between FAMIX-Core and
Moose-Query packages because we reference FAMIXAssociation
- If one day we create another project from FAME to represent
something that is not a software model, we will maybe not have
FAMIXAssociation but we might still have associations. And Moose-Query
could still be useful on this project.

I propose to add to TEntityMetaLevelDependency two methods:

allOutgoingAssociationTypes
    ^ (self allChildrenTypes flatCollectAsSet: #outgoingAssociationTypes)
        addAll: self outgoingAssociationTypes;
        yourself

and

allIncomingAssociationTypes
    ^ (self allChildrenTypes flatCollectAsSet: #incomingAssociationTypes)
        addAll: self incomingAssociationTypes;
        yourself


Thus the entities will be able to return the associations they and
their children can have.

Then we can replace "FAMIXAssociation withAllSubclassesDo:" by "(self
strategy allAssociationTypesFor: anEntity)
do:" where the strategy is a MooseQuery{Direction}DirectionStrategy
that will call either #allIncomingAssociationTypes or
#allOutgoingAssociationTypes.

I have an image with all those changes and all the tests of
Moose-Query and Moose-Chef are green.

I am waiting your opinion on this changes.

Have a nice day.

--
Cyril Ferlicot
https://ferlicot.fr

http://www.synectique.eu
2 rue Jacques Prévert 01,
59650 Villeneuve d'ascq France
_______________________________________________
Moose-dev mailing list
[hidden email]
https://www.list.inf.unibe.ch/listinfo/moose-dev