Les bases – Création de relations et de links

Introduction

Generic System permet de créer des types, des sous-types et des instances. Il est aussi possible de créer des attributs et des propriétés, et de leur attribuer des valeurs en créant des holders.

Mais comment relier les types entre eux ? Il existe pour cela des relations et des liens (links). Les relations peuvent impliquer plusieurs éléments :

  • binaire (2 éléments) ;
  • ternaire (3 éléments) ;
  • n-aire (n éléments).

Contrairement aux bases de données relationnelles, la gestion des relations n-aires est particulièrement simple avec Generic System.

Nous allons poursuivre cette démonstration avec notre exemple de l’article  Les bases – Création de types, de sous-types et d’instances.

Cas simple : relation binaire

Une relation binaire nous permet de relier deux types. Pour reprendre notre exemple, on peut imaginer que nos véhicules possèdent une couleur.

Création de la relation

Nous allons donc créer un nouveau type Color ainsi que deux instances red et yellow :

Continue reading Les bases – Création de relations et de links

Les bases – Rechercher une information

Comme dans tout moteur de persistance, il est possible de rechercher des informations stockées dans Generic System. On distingue deux types de recherche :

  • les recherches simples, pour lesquelles un seul résultat est attendu ;
  • les recherches avancées, qui peuvent conduire à un ensemble de résultats.

Nous allons détailler dans cet article comment réaliser une recherche simple, les recherches avancées seront abordées dans l’article Les bases – Rechercher plusieurs informations.

Introduction

Generic System permet de créer des types, des instances, des relations, etc. Nous avons également vu que la valeur d’un Generic est unique : par exemple, il est impossible de créer deux types avec le même nom. Une recherche simple renverra donc un résultat unique.

Si pour ajouter un Generic on fait appel à la méthode addGeneric, il existe donc une méthode getGeneric pour retourner le Generic correspondant à la recherche. Il existe également une méthode setGeneric, dont le comportement diffère selon si le Generic existe ou non dans le moteur : s’il existe, la méthode renvoie le Generic en question, sinon elle le crée.

Continue reading Les bases – Rechercher une information

Les bases – Rechercher plusieurs informations

Dans Generic System, il est possible de rechercher spécifiquement un Generic (recherche simple), ou bien un ensemble de Generic (recherche avancée). Quand un ensemble de résultats doit être retourné, Generic System ne renvoie pas de liste de Generic, mais un Snapshot.

Introduction

Qu’est-ce qu’un Snapshot ?

D’un point de vue fonctionnel, un Snapshot est un ensemble de résultats qui est conscient de son contexte. Le Snapshot est directement en relation avec le modèle de persistence des données, contrairement aux Collections Java qui possèdent un cache en interne contenant les informations.

D’un point de vue technique, un Snapshot est d’une part un fournisseur de Stream et d’autre part un aware Iterable. Comme nous allons le voir par la suite, un Snapshot peut être requêté directement en utilisant des filtres de Stream.

Comparaison Snapshot / Collection

Pour prendre un exemple simple, nous allons créer une instance de Vehicle puis la stocker soit dans une Collection, soit dans un Snapshot. Nous allons ensuite vérifier que notre Collection et notre Snapshot contiennent bien cette instance. Puis nous ajoutons une nouvelle instance de Vehicle, et nous vérifions que notre Collection et notre Snapshot contiennent bien les deux instances.

Continue reading Les bases – Rechercher plusieurs informations

Avancé – Supprimer un generic

Depuis le début de l’utilisation de Generic System, nous avons créé des types, des instances, des attributs… et nous avons vu comment les supprimer en utilisant la fonctionnalité remove().
Ah, au fait, il y a un terme générique pour désigner un type, une instance, un attribut, un holder, une relation ou encore un link : il s’agit tout simplement d’un Generic.

Suppression d’un generic

Un generic peut être supprimé en utilisant la méthode remove().

Nous avions utilisé cet exemple pour supprimer un type :

Suppressions et dépendances

Comme dans toute base de données, il faut faire attention lors des modifications et particulièrement lors des suppressions.
Vous ne pouvez pas supprimer un Generic si d’autres en dépendent : c’est la fameuse contrainte d’intégrité référentielle des bases de données relationnelles, qui existe également sur Generic System.
Le meilleur exemple pour comprendre est la suppression d’un type qui est relié à un autre. Continue reading Avancé – Supprimer un generic

Avancé – Relations : OneToOne, OneToMany, ManyToOne et ManyToMany

Nous allons aborder un chapître assez simple, où nous allons revenir plus en détail sur les relations. Pour cela, assurez-vous d’avoir bien compris les notions de relations et de contraintes. Si ce n’est pas le cas, vous pouvez consulter les articles qui en parlent :

Avant de commencer, précisons que le thème que nous allons traiter dans ce chapître sera présenté pour les relations binaires, mais qu’il peut également être étendu aux relations n-aires.

Préparons le terrain

Avant d’aborder plus en profondeur les relations, il vous faut apprendre une nouvelle notion. Rassurez-vous, celle-ci est simple à comprendre.

Savez-vous ce qu’on appelle l’axe d’une relation dans Generic System ?

Il s’agit du type situé à la position i de la relation, i étant le numéro de l’axe. Appliquons cela à notre relation bien connue VehicleColor.

L’axe 0 de VehicleColor est Vehicle puisqu’il est à la position 0 dans la relation.
L’axe 1 est quand à lui Color puisque situé à la position 1 de la relation.

Enfin, retenez bien 2 termes : la base désigne l’axe 0 d’une relation, les targets désignent les autres axes de la relation.
Ainsi, la target 1 est l’axe 1 de la relation, la target 2 désigne l’axe 2 de la relation, et ainsi de suite.

Les différents types de relation

Il existe 4 types de relation : OneToOne, OneToMany, ManyToOne, ManyToMany.
Nous allons voir chacune d’elles et utiliser pour cela la SingularConstraint.

Continue reading Avancé – Relations : OneToOne, OneToMany, ManyToOne et ManyToMany