-
Notifications
You must be signed in to change notification settings - Fork 7
PrΓ©sentation technique des applications
Ivan Gabriele edited this page Apr 24, 2024
·
31 revisions
βββ domain
β βββ config
β β βββ FooConfig.kt
β βββ entities
β β βββ foo
β β βββ Foo(Entity).kt
β βββ exceptions
β β βββ FooException.kt
β βββ filters
β β βββ FooFilter.kt
β βββ mappers
β β βββ FooMapper.kt
β βββ 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
β β βββ ControllersExceptionHandler.kt
β βββ config
β β βββ FooConfig.kt
β βββ database
β β βββ models
β β β βββ FooModel.kt
β β βββ repositories
β β βββ interfaces
β β β βββ (I)DBFooRepository.kt
β β βββ JpaFooRepository.kt
β βββ monitorenv/monitorfish/rapportnav
βββ utils
βββ GlobalFooer.kt
GΓ©nΓ©rateur d'arbre utilisΓ© : https://www.text-tree-generator.com.
- MΓ©lange de diffΓ©rents types de nommage : parfois suffixes, parfois prefixes.
- Config : on ne pourrait pas avoir un dossier "global" config plutΓ΄t ? C'est un peu hors clean-archi non ?
- Confusion dans le nommage des repository domain et des repository infrastructure, mΓͺme chose pour les interfaces. Les repository domain dΓ©finissent les repository infrastructure et les
infrastructure/repositories/interfaces
reprΓ©sentent 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/
etoutputs/
dans le dossieradapters
=> pourquoi ce dossier intermΓ©diaire ? - 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 ?
- Exceptions : la sΓ©paration domain / infrastructure n'est pas clair.
- Nommage :
- On suffixe tous les fichiers par leur rΓ΄le Γ l'exception des :
- entities
- enums
- types
- use cases
- utils
- 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.
- On suffixe tous les fichiers par leur rΓ΄le Γ l'exception des :
- Confusion repo/interface, proposition de structure/nommage :
/domain /repositories /FooRepository.kt /infrastructure /queries /FooQueryRepository.kt /repositories /JpaFooRepository.kt
- Config : Tout dans un
config/
au mΓͺme niveau quedomain/
etinfrastructure/
. - 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.
- Adapters : Supprimer les dossiers intermΓ©diaires
inputs/
etoutputs/
car les suffixes et les sur-dossiers mΓ©tiers qui les rassemblent me paraissent assez clairs pour en diffΓ©rencier l'usage. - 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 ?).
- Exceptions :
- Dans la mesure du possible, les exceptions qui proviennent de l'infrastructure avant de passer par le domain, normalement dans un use case, devraient Γͺtre converties en une domain exception. Ce qui permet de conserver les exceptions infrastructure sΓ©parΓ©es de exception domain.
-
ControllersExceptionHandler
ne gère nominativement que les exceptions domain. - Pour les exceptions infrastructure qui remontent jusqu'au
ControllersExceptionHandler
, cela signifie qu'elles sont non-gΓ©rΓ©es/non-transformΓ©es et sont donc des erreurs internes => 5xx.ControllersExceptionHandler
les gère via un "catch all".
Ce qui donnerait :
βββ config # All configs, both for domain & infrastructure.
β βββ FooConfig.kt
βββ domain
β βββ entities
β β βββ foo
β β β βββ Foo.kt
β β βββ Utils.kt # Example for entities-dedicated utils, all functions in the same file.
β βββ exceptions # Only domain exceptions.
β β βββ FooException.kt
β βββ filters
β β βββ FooFilter.kt
β βββ mappers
β β βββ FooMapper.kt
β βββ repositories
β β βββ (FooRepository
β βββ use_cases
β βββ foo
β βββ dtos
β β βββ FooDto.kt
β βββ CreateOrUpdateFoo.kt # Include methods prefixed by API version if necessary.
βββ infrastructure
β βββ api
β β βββ adapters
β β β βββ bff
β β β β βββ foo
β β β β βββ CreateOrUpdateFooDataInput.kt
β β β β βββ FooDataOutput.kt
β β β βββ publicapi
β β βββ endpoints
β β βββ bff
β β β βββ FooController,kt
β β β βββ BarController.kt # Include methods prefixed by API version if necessary.
β β βββ publicapi
β β βββ ControllersExceptionHandler.kt # Handle domain exceptions, catch-all infra exceptions.
β βββ config
β β βββ FooConfig.kt
β βββ database
β β βββ models
β β β βββ FooModel.kt
β β βββ queries
β β β βββ FooQueryRepository.kt
β β βββ repositories
β β βββ JpaFooRepository.kt
β βββ exceptions # Only infrastructure exceptions.
β β βββ FooException.kt
β βββ monitorenv/monitorfish/rapportnav
βββ utils # Global utils, one file per function.
βββ GlobalFooer.kt