As a developer, I want the current modeling of relationships to be consistent and clear. Currently, this is not the case.
On the one hand, the intention seems to be that entities keep references to related entities as part of their state - at least the getPermanentStore (), getMutableStore (), and getChildrenStore () methods in the Core interface, as well as the initialization logic in the " BaseEntityFactory "and" EntityFactory " indicate that. On the other hand, only very few entities actually offer access methods to these references, whereas a majority of relationships must be traversed using corresponding methods in the interfaces "BaseEntityManager" and "EntityManager". It is completely unclear how relationships can be created, changed or deleted. In fact, the "transaction" interface currently used for write operations allows the creation and deletion of entire entities, but not the creation or deletion of relationships between existing entities. They say that the traversing of relationships was shifted from the entities to the EntityManager for performance reasons. This justification makes no sense, however, since a performance gain can only be achieved by a "bulk load" of relationships. However, the methods in the EntityManager are all univalent.
It was decided, that a major rework of the handling of the relations needs better definitiions of use cases and requirements than we have now,
To improve the current situation we have modified the interface.
in the BaseEntityManager the get*Store methods have been defined as non final.
With that, these methods can be overriden in the OdsAdpter and be used there to access the stores without resorting directly to the core.
There also comments added in several places to improve the understandibility of the current implementation.