Skip to main content
Welcome. This site supports keyboard navigation and screen readers. Press ? at any time for keyboard shortcuts. Press [ to focus the sidebar, ] to focus the content. High-contrast themes are available via the toolbar.
serard@dev00:~/cv

Lecture juridique

Un texte juridique ne vaut pas seulement par ses mots : il possède une autorité, une version, un champ d'application et des relations avec d'autres textes. Il en va de même pour un langage métier. Une liste de classes ne suffit pas ; il faut pouvoir dire qu'un concept est une entité, qu'une relation est obligatoire et qu'un invariant doit rester vrai.

dsl.dsl donne un nom à ces formes. Il ne connaît ni Employee ni Appeal. Il connaît Aggregate, Entity, ValueObject, Enum, Property, Relationship, Invariant et Projection.

Lecture architecture

Le fichier M2 est compatible YAML mais possède une sémantique plus stricte :

language:
  id: Dsl
  version: 1.0.0
  level: M2
  kind: meta-language
  concepts:
    Language:
      kind: aggregate
      relationships:
        modules: { target: Module, cardinality: one-or-more, containment: true }

Le YAML ne sait pas ce qu'est un aggregate. Le compilateur, lui, vérifie l'identité du langage, les types de propriétés, les cibles de relations et les cardinalités autorisées.

Diagram
L'auto-description est bornée par un bootstrap syntaxique minimal ; le domaine M2 reste dans dsl.dsl.

Pourquoi l'Aggregate Root est Language

Une modification isolée de Property n'a pas de sens sans langage propriétaire. C'est Language qui garantit l'unicité des concepts, la cohérence de version et la résolution des imports. Les concepts internes restent modifiables seulement par cette frontière.

Le fichier complet est disponible dans assets/examples/dsl.dsl. Le test M2_bootstrap_describes_itself empêche la suppression silencieuse d'une primitive nécessaire à l'auto-description.

Diagnostics attendus

Code Sens
DSL001 import absent
DSL002 type ou cible inconnue
DSL004 cardinalité invalide
DSL005 cycle d'héritage
DSL007 niveau M0/M1/M2 incohérent
DSL008 primitive M2 nécessaire au bootstrap absente
DSL010 intervalle temporel incohérent
DSL011 valeur absente de l'enum métier ciblé

Le chapitre suivant utilise ce vocabulaire pour composer Citizen et French Labor.

⬇ Download