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 :

Paramétrage statique

Voyons maintenant comment paramétrer la même structure avec des annotations :

La déclaration d’un nouveau type est la plus simple : il suffit de déclarer une nouvelle classe, et de l’annoter @SystemGeneric. Pour la déclaration d’un attribut, il faut déclarer une nouvelle classe et l’annoter avec @Components pour indiquer sur quel Generic elle est posée. Dans notre exemple, on spécifie que l’attribut Options est posé sur le type Vehicle. Enfin, la déclaration d’une relation est très similaire à celle d’un attribut. La seule différence, c’est qu’il faut préciser l’ensemble des classes impliquées dans la relation dans l’annotation @Components. Ici, on spécifie que la relation VehicleColor relie les types Vehicle et Color.

Et voilà maintenant comment réécrire l’exemple précédent :

Vous voyez l’analogie entre les deux méthodes ? On commence par créer notre Engine en lui précisant toutes les classes de notre modèle. Ensuite, on fait appel à la méthode find de Engine pour récupérer les références à nos classes annotées. Plutôt simple, non ?

En résumé

  • Pour chaque Generic, il faut créer une classe.
  • L’annotation @SystemGeneric spécifie que la classe correspond à un nœud du graphe statiquement paramétré.
  • L’annotation @Components spécifie que la classe annotée est un composant de la (ou des) classe(s) indiquée(s) dans l’annotation.
  • A la création de l' Engine, il faut spécifier toutes les classes annotées.
  • La méthode find de l' Engine permet de rechercher une classe annotée.