#8 - Ubiquitous Langage : définition et mise en place

#8 - Ubiquitous Langage : définition et mise en place
Photo by Brett Jordan / Unsplash

En relisant le blue book, je me suis rendu compte d'une erreur de ma part, enfin, plutôt un oubli, pour être précis. En effet je me suis rappelé que les 3 piliers du Domain Driven Design sont :

  • l'approche stratégique
    J'ai commencé à en parler dans les 6 premiers articles, là on est OK.
  • l'approche tactique
    ç'est prévu, dans les articles à venir, on est OK aussi là dessus.
  • L'ubiquitous langage
    Ah.
    Là on y est pas du tout OK en fait, j'ai carrément zappé cette partie, pourtant ultra importante.  

L'objectif est de définir et de nommer, de manière unique et non ambigüe, les différents concepts et entités de notre application, et surtout de faire en sorte que cete terminologie soit partagée entre toutes les parties prenante du projet.
Vous me direz, "c'est la base", et effectivement, ça l'est.

Ceci étant il n'est pas rare, sur un projet de développement logiciel, que chaque partie prenante nomme les concepts utilisés un peu dans son coin. Cela peut aboutir a des difficultés de compréhension, entre le métier et la technique, voir même à la duplication de terme pour designer un concept, parfois jusque dans le code. Très sympa quand vous galérez déjà à comprendre le métier, que vous vous rendez compte que les fonctions get_x et get_y font en réalité la même chose.

La définition d'un langage partagé, c'est donc l'occasion de mettre en place un glossaire, objectif de cet article donc.
Je triche un peu car comme j'ai déjà développé une version de l'application que l'on se propose d'écrire, j'ai déjà l'ensemble du vocabulaire en tête, mais allons y.

NB: les concepts sont nommés en français, mais le code est en anglais, nous retiendrons donc la traduction entre parenthèse comme référence, ce qui peut donner lieu à des échanges en franglais très jean-claude-vandammien lors des réunions, comme dans tout projet de réalisation informatique.

Equipe (team) :
On va commencer doucement, avec un concept qui parle à tout le monde. Un équipe c'est un groupe de joueur. Jusque là, ça bouscule pas un train de marchandise, on est d'accord.
Une équipe possède aussi de la trésorerie, un encadrement, un nombre de relances, un facteur de popularité.
Une équipe est construite pour participer à une compétition, elle est coachée par un coach. Elle doit respecter des règles de création, et enfin elle est assemblée avec des joueurs dont le nombre et le profil sont définis par un roster.

C'est déjà un poil plus tendu vous aurez noté. Nous allons donc définir tous les termes ci-dessus.

Compétition (competition)
Une compétition, c'est un évènement plus ou moins ponctuel, qui va fournir un cadre de rencontre à différentes équipes. Une compétition est organisée par un club, elle est gérée par un ou plusieurs responsables. Une compétition peut-être une ligue ou un tournoi, la compétition fixe les règles de création des équipes, le mode de calcul des points et des points bonus.

Ligue (league)
Une ligue est un type particulier de compétition, qui se déroule sur une période de temps long, et qui se caractérise par une programmation des matchs. Celle-ci peut-être de type :
- calendrier: toutes les rencontres sont prévues à l'avance dans le cadre des semaines de rencontres
- "open" seules les dates de rencontre sont prévues (ou même pas dans certains cas) et les joueurs présent tirent au sort leur adversaire.

Tournoi (tournament)
Un tournoi est un type particulier de compétition, qui se déroule sur quelques jours max, et dont les appariement sont déterminés au fil de l'eau, en utilisant une méthode de type "ronde suisse".  

Coach (coach)
Afin de ne pas confondre le joueur humain qui joue physiquement à Bloodbowl et le joueur fictif au sein d'une équipe, on désigne par coach, le joueur qui joue à Bloodbowl, et par joueur le joueur en temps que membre d'une équipe de bloodbowl.

Roster (roster)
Une roster contient la définition d'un type d'équipe. Donc le roster désigne l'ensemble des règles, pour un type d'équipe donné, dont:
- la liste et la limite en nombre des types de joueur disponibles pour ce type d'équipe
- le prix des relances d'équipes pour ce type d'équipe
- le groupe de roster de ce type d'équipe
- les champions (star players) qui sont susceptibles de jouer avec ce roster.

Tout ça est un peu détaillé. Donc en résumé nous retiendrons qu'un roster, contient les règles de référence, applicables à la création d'une équipe, quelle que soit la compétition dans laquelle l'équipe va jouer.

Groupe de classement / poule  (ranking group)
Une compétition peut choisir de grouper les équipes au sein de poule, afin de séparer les classements en plusieurs groupes. Le classement d'une équipe au sein d'une competition s'entend donc au sein d'un groupe de classement. Les poules ne jouent que sur les classements, les équipes peuvent toutjours rencontrer toutes les autres équipes d'une compétition, indépendamment des groupes de classement.

Règles de création (creation rules)
Ces règles définissent comment construire son équipe. Il existe, dans le monde de bloodbowl, 26 types d'équipes (roster). Le coach qui souhaite construire une équipe choisi une des 26 possibilités d'équipe, et en fonction

Champion / Starplayer :
Les champions sont des personnages spéciaux qui peuvent intégrer temporairement une équipe, en fonction de la différence de puissance des deux équipes (inducement), afin de réduire les écarts.

Inducement :
L'inducement représente la différence de puissance entre deux équipes, calculée par une grandeur numérique caractéristique de l'équipe: la team value (team value).

Joueur:
Un joueur est un membre (fictif) d'une équipe, il prendra donc part à des matchs. Notion simple à ne pas confondre avec le coach, qui représente le joueur qui joue ces matchs sur table.

Niveau d'expérience :
Le niveau d'expérience d'un joueur représente le nombre d'améliorations qui ont été achetées par ce joueur, via la dépense de SPP (star player points). Le nombre d'amélioration et donc le niveau d'expérience sont au maximum égale à 7.

Points d'expérience / Star player points ou SPP :
Les points d'expérience sont gagnés par les joueurs d'une équipe, lorsqu'ils réalisent certaines action au cours d'un match. Les points d'expérience sont attribués selon un barème qui dépend des actions réalisées, et ce barème doit pouvoir être adapté au sein d'une compétition. Les compétition de type tournoi ne rapportent pas de point d'expérience. Les points d'expériences sont accumulés par chaque joueur, puis dépensés pour acheter des augmentations. Cette logique se rapproche de la gestion d'un compte en banque.

Augmentation de joueur / player upgrade :
L'augmentation d'un joueur vient modifier le profil statistique et / ou les compétences de ce joueur, puis lui attribuer de nouvelles facultées. Les augmentations de joueurs peuvent être gagnées par l'acquisition de point de compétences, ou affectées gratuitement par un commissaire de ligue, dans le cadre d'une modification manuelle de joueur.

Diminution de joueur / player Downgrade :
Ce mécanisme est l'inverse du précédent, et reflète généralement le fait qu'un joueur ait été blessé au cours d'un match. Le joueur en question va donc perdre certaines capacités. Le profil de base du joueur, issue de la ligne de roster qui lui correspond, va donc être modifié par le player downgrade.

Customisation d'équipe :
La customisation d'équipe permet de modifier manuellement, la trésorerie, la popularité, ou les autres grandeurs caractéristiques d'une équipe. Par modification manuelle, on désigne une modification d'une équipe qui n'est pas crée suite à un match. Cette fonction est généralement utilisée pour corriger à postériori une erreur dans le rapport de match.

Customisation de joueur :
Le fait de customiser un joueur revient à modifier sont profil, ses compétences et ou son prix, sans affecter la ligne de roster correspondante. Cela est utile pour prendre en charge des règles spéciales qui pourraient intervenir lors de l'année.

Conclusion

J'aurais pu continuer à égrener les termes métiers, puisque nous avons, je pense, vu a peu près un tiers des notions.
Néanmoins, les notions principales ont été définies, et la valeur de cet article ne se situe pas nécéssairement sur la complétude des informations qu'il contient.
L'objectif était plutôt de souligner l'importance de s'entendre sur les termes, les concepts et les règles métiers qui sont généralement encapsulées dans les termes eux mêmes.
D'ou l'importance cruciale de se comprendre entre parties prenantes, et donc l'importance de ce petit glossaire d'exemple.