klee-contrib / topmodel

Outil de modélisation et générateurs pour divers langages
https://klee-contrib.github.io/topmodel/#/
MIT License
9 stars 9 forks source link

Domaines de composition et transformations de domaines explicites #255

Closed JabX closed 1 year ago

JabX commented 1 year ago

Fix #246

Cette PR contient beaucoup de breaking changes, désolé, mais c'est pour la bonne cause (promis).

asList: true > as: list

Le listDomain n'existe plus, il est désormais possible de définir plusieurs asDomains pour définir plusieurs transformations possibles sur une propriété du domaine. Ci-dessous, la migration de l'ancien vers le nouveau :

domain:
  name: DO_ID
  listDomain: DO_ID_LIST
---
class:
   name: DTO
   properties:
     - alias:
          class: Entity
          property: Id
       asList: true

devient

domain:
  name: DO_ID
  asDomains: 
    list: DO_ID_LIST
---
class:
   name: DTO
   properties:
     - alias:
          class: Entity
          property: Id
       as: list

Il est aussi possible de spécifier as sur une association, pour définir la transformation à utiliser pour les associations xxxToMany. Elle est renseigné à "list" par défaut pour correspondre au comportement existant.

Domaines de composition

kind n'existe plus sur les compositions, remplacé par domain au même titre que les autres types de propriétés. Son comportement est identique à l'usage existant de kind avec un domaine, sauf qu'il s'agit maintenant de la seule façon de définir le type de composition. Donc :

Types d'implémentation génériques

Il est désormais possible de renseigner genericType dans une implémentation de domaine, en plus de type. Ce champ peut référencer en plus des variables classique la variable spéciale {T}, qui correspond au type original de la propriété. Ce nouveau paramètre sera utilisé pour les 3 cas suivants :

Par exemple, le domaine DO_CODE_LIST dans les exemples est maintenant défini ainsi, pour reproduire à l'identique le comportement existant :

---
domain:
  name: DO_CODE_LIST
  label: Code
  ts:
    type: string[]
    genericType: "{type}[]"
  csharp:
    type: string[]
    genericType: "{type}[]"
  java:
    type: List<String>
    genericType: List<{type}>
    imports:
      - java.util.List

Autres impacts

Pourquoi ?