Skip to content

PrΓ©sentation technique des applications

Ivan Gabriele edited this page Apr 24, 2024 · 31 revisions

Backend

Structure et nommage des fichiers

/
β”œβ”€β”€ config
β”œβ”€β”€ domain
β”‚   β”œβ”€β”€ entities
β”‚   β”‚   └── foo
β”‚   β”‚       └── Foo.kt
β”‚   β”œβ”€β”€ exceptions
β”‚   β”‚       └── FooException.kt
β”‚   β”œβ”€β”€ filters
β”‚   β”‚       └── FooFilter.kt
β”‚   β”œβ”€β”€ mappers
β”‚   β”œβ”€β”€ repositories
β”‚   β”‚   └── (I)FooRepository
β”‚   └── use_cases
β”‚       └── foo
β”‚           β”œβ”€β”€ dtos
β”‚           β”‚   └── FooDTO.kt
β”‚           └── CreateOrUpdateFoo.kt
β”œβ”€β”€ infrastructure
β”‚   β”œβ”€β”€ api
β”‚   β”‚   β”œβ”€β”€ adapters
β”‚   β”‚   β”‚   β”œβ”€β”€ bff
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ inputs
β”‚   β”‚   β”‚   β”‚   β”‚   └── foo
β”‚   β”‚   β”‚   β”‚   β”‚       └── CreateOrUpdateFooDataInput.kt
β”‚   β”‚   β”‚   β”‚   └── outputs
β”‚   β”‚   β”‚   β”‚       └── foo
β”‚   β”‚   β”‚   β”‚           └── FooDataOutput.kt
β”‚   β”‚   β”‚   └── publicapi
β”‚   β”‚   └── endpoints
β”‚   β”‚       β”œβ”€β”€ bff
β”‚   β”‚       β”‚   β”œβ”€β”€ FooController,kt
β”‚   β”‚       β”‚   └── BarControllerV[0-9].kt
β”‚   β”‚       └── publicapi
β”‚   β”‚           β”œβ”€β”€ FooController.kt
β”‚   β”‚           └── BarControllerV[0-9].kt
β”‚   β”œβ”€β”€ database
β”‚   β”‚   β”œβ”€β”€ models
β”‚   β”‚   β”‚   └── FooModel.kt
β”‚   β”‚   └── repositories
β”‚   β”‚       β”œβ”€β”€ interfaces
β”‚   β”‚       β”‚       └── (I)DBFooRepository.kt
β”‚   β”‚       └── JpaFooRepository.kt
β”‚   └── monitorenv/monitorfish/rapportnav
└── utils

GΓ©nΓ©rateur d'arbre utilisΓ© : https://www.text-tree-generator.com.

Questions

  • MΓ©lange de diffΓ©rents types de nommage : parfois suffixes, parfois prefixes.
  • Confusion dans le nommage des repository domain et des repository infrastructure, mΓͺme chose pour les interfaces. Les repository domain sont en rΓ©alitΓ© des interfaces pour les repository infrastructure et les infrastructure/repositories/interfaces sont en rΓ©alitΓ© les query DB.
  • Versioning via de sous-dossier, des suffixes, des sur-dossiers, ou internes en suffixant les noms des mΓ©thodes ?
  • Acronymes all cap ou camel-cased ?
  • Remise en question des dossiers inputs/ et outputs/ dans le dossier adapters => pourquoi pas directement dans adapters ?
  • Suffixe des entitΓ©s ?
  • Utils / structure : par sous-dossier relatif, globaux ou les deux selon qu'ils soient globaux ou dΓ©diΓ©s ?
  • Utils / fonctions : rassemblΓ©s sous la mΓͺme classe en plusieurs mΓ©thodes ou sΓ©parΓ©s en un fichier par fonction ?

Suggestions

  • Nommage :
    • On suffixe tout par son rΓ΄le Γ  l'exception des :
      • entitΓ©s
      • use cases
    • Singulier Γ  l'exception des dossiers structurels (entities/, utils/, etc) et des fichiers dΓ©diΓ©s Γ  des collections (GetFoos). On avait dΓ©jΓ  dΓ©cidΓ© de Γ§a normalement.
  • Config : Tout dans un config/ au mΓͺme niveau que domain/ et infrastructure/.
  • Versionning : en suffixant les mΓ©thodes des classes (getAllV1(), executeV1()) pour :
    • Γ©viter de complexifier encore un peu plus la structure des dossiers ;
    • Γ©viter d'avoir Γ  faire le choix de "quand un sur-dossier, quand un sous-dossier ?" ;
    • pour simplifier le codage en Γ©vitant d'avoir Γ  ouvrir plusieurs fichiers similaires (v1/foo/FooController, v2/foo/MyController).
  • Acronymes all cap ou camel-cased : Camel-cased car je trouve Γ§a plus lisible mais c'est peut-Γͺtre une affaire de goΓ»t. => Quoique soit le choix, je suggΓ¨re qu'on fasse le mΓͺme choix pour le Frontend.
  • Suffixe des entitΓ©s : pas de suffixe.
  • Utils / structure : Comme dans le Frontend, au niveau qui correspond Γ  leur utilisation.
  • Utils / fonctions : Comme dans le Frontend, en plusieurs fichiers pour les utils globaux, un seul fichier avec plusieurs mΓ©thodes lorsqu'ils sont localisΓ©s (pour Γ©viter d'ajouter des sous-dossiers supplΓ©mentaires ?).