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

Avancé – La gestion des Tree

Generic System permet de persister des arbres. Pour commencer nous avons besoin de créer un arbre, puis de l’instancier. Une instance sans super est interprétée par Generic System comme la racine de l’arbre. Pour ajouter une feuille ou une branche à un nœud, il faut créer une instance de l’arbre en précisant ce nœud comme super.

Premier exemple

Tout développeur web connaît la structure de base d’une page web. Voyons comment créer un arbre HTML simple avec Generic System :

Continue reading Avancé – La gestion des Tree

Avancé – Gestion de la concurrence

Les propriétés ACID des transactions

Les propriété ACID garantissent que l’exécution d’une transaction est réalisée de façon fiable. Dans Generic System, la gestion de la concurrence est entièrement régie par une règle fondamentale, qui peut être énoncée très simplement :

Toute lecture d’un objet ou d’un ensemble d’objets réalisée à un instant t est reproductible.

Les lectures au sens large sont en quelque sorte gravées dans le marbre dès lors qu’elles ont été effectivement réalisées. En effet, toute écriture réalisée pour un instant t’, ne saurait remettre en cause une tentative à venir de reproduire une lecture déjà réalisée pour un instant t. Ainsi t’ doit être ultérieur à t pour que l’écriture soit validée. Au contraire, si t’ est antérieur à t la suppression échouera car elle remettrait en cause le résultat d’une nouvelle lecture à l’instant t.

Continue reading Avancé – Gestion de la concurrence

Avancé – Le paramétrage statique

Vous commencez à connaître notre exemple de Vehicle. Jusqu’ici, nous avons créé cet exemple dynamiquement : nous créons notre type Vehicle, nous posons dessus l’attribut Options, nous créons notre instance de Vehicle

Mais savez-vous qu’il existe une autre manière de procéder ? Nous pouvons créer notre exemple simplement à l’aide d’annotations : c’est ce qu’on appelle le paramétrage statique.

Paramétrage dynamique

Voici l’exemple sur lequel nous allons travailler, qui a été déclaré de façon dynamique :

Continue reading Avancé – Le paramétrage statique