đ Proposition : Adoption des Principes de la Clean Architecture pour un DĂ©veloppement Durableï
0. Resourcesï
clean architecture en frontend: https://github.com/david-ouatedem/clean-frontend-template
clean architecture en backend: https://github.com/david-ouatedem/clean-backend-template
comprendre la clean architecture:
1. Contexteï
Ă mesure que notre application Ă©volue en fonctionnalitĂ©s et en complexitĂ©, nous commençons Ă faire face Ă des dĂ©fis courants de mise Ă lâĂ©chelle(scaling) :
Lâajout de nouvelles fonctionnalitĂ©s nĂ©cessite souvent de modifier plusieurs couches de code.
De petites mises à jour introduisent parfois des bugs inattendus dans des zones non liées.
LâintĂ©gration de nouveaux dĂ©veloppeurs prend du temps car la logique mĂ©tier et les dĂ©tails du framework sont Ă©troitement couplĂ©s.
Le changement ou la mise à niveau des technologies (par exemple, ORM, APIs) semble risqué et chronophage.
Ce sont des symptĂŽmes naturels dâun couplage Ă©troit entre notre logique mĂ©tier et le framework/infrastructure.
Pour résoudre cela, je propose que nous commencions à adopter les principes de la Clean Architecture dans les nouveaux projets.
2. Ce que signifie la Clean Architecture (en termes pratiques)ï
La Clean Architecture est une façon de structurer notre code de sorte que :
La logique mĂ©tier (nos rĂšgles et cas dâusage rĂ©els) est indĂ©pendante des frameworks, bases de donnĂ©es ou APIs.
Les frameworks et outils deviennent des dĂ©tails remplaçables â et non des parties centrales de notre logique.
Chaque fonctionnalité ou module a une structure cohérente et prévisible, facilitant son extension et ses tests.
En dâautres termes : la Clean Architecture sĂ©pare ce que fait lâapplication de la façon dont elle le fait.
3. Principaux Avantages pour Notre Ăquipe et Notre Produitï
Défi |
Comment la Clean Architecture aide |
|---|---|
Livraison lente des fonctionnalités |
Chaque fonctionnalitĂ© est isolĂ©e dans une seule classe âcas dâusageâ. Les changements deviennent plus rapides et plus sĂ»rs. |
Régressions fréquentes |
Les couches sont indĂ©pendantes. Lâimpact dâun changement est prĂ©visible et contenu. |
Intégration difficile |
Structure cohĂ©rente : contrĂŽleurs â cas dâusage â dĂ©pĂŽts. ModĂšle mental plus facile pour les nouveaux contributeurs. |
Verrouillage technologique |
La logique centrale est indĂ©pendante du framework. Lâinfrastructure peut changer sans réécrire les rĂšgles mĂ©tier. |
Code difficile Ă tester |
Les cas dâusage purs peuvent ĂȘtre testĂ©s unitairement instantanĂ©ment sans dĂ©pendances. |
4. Ă Quoi Cela Ressemble en Pratiqueï
Au lieu de mettre toute la logique dans un service NestJS ou React, nous la séparons en couches :
src/
âââ domain/ # ModĂšles mĂ©tier de base (entitĂ©s, rĂšgles)
âââ application/ # Cas d'usage (logique mĂ©tier pure, pas de framework)
âââ infrastructure/ # BD, API, adaptateurs (NestJS, Prisma, etc.)
âââ interface/ # ContrĂŽleurs, rĂ©solveurs, DTOs (cĂŽtĂ© NestJS)
Exemple :
application/use-cases/register-user.usecase.ts
export class RegisterUserUseCase {
constructor(private readonly usersRepo: UsersRepository) {}
async execute(input: RegisterUserDto) {
const user = new User(input.name, input.email);
await this.usersRepo.save(user);
}
}
interface/http/user.controller.ts
@Controller("users")
export class UserController {
constructor(private readonly registerUser: RegisterUserUseCase) {}
@Post()
async register(@Body() dto: RegisterUserDto) {
await this.registerUser.execute(dto);
}
}
6. RĂ©sultats Attendusï
En appliquant la Clean Architecture, nous pouvons nous attendre Ă :
Une livraison de fonctionnalités plus rapide avec moins de conflits de fusion
Des effets secondaires réduits lors de la mise à jour des fonctionnalités existantes
Une intégration plus simple pour les nouveaux développeurs
Une flexibilité pour faire évoluer notre pile technologique en toute sécurité
Une plus grande confiance dans les déploiements grùce à des tests isolés
7. RĂ©sumĂ© de la Propositionï
Objectif : ImplĂ©menter la Clean Architecture dans les nouveaux projets et potentiellement lâadopter dans les nouveaux modules des projets existants
But : Améliorer la maintenabilité, la cohérence et la vitesse de développement
Approche : Commencer avec un nouveau projet
Avantages : Itération plus rapide, changements plus sûrs, intégration plus facile, flexibilité à long terme
8. Prochaine Ătapeï
Si lâĂ©quipe est dâaccord, nous pouvons :
Choisir un projet Ă venir.
LâimplĂ©menter en utilisant la Clean Architecture.
Examiner les rĂ©sultats ensemble avant de dĂ©cider de lâappliquer plus largement.
Préparé par :
Ouatedem David
Ingénieur Logiciel
5. Comment Nous Pouvons lâAdopterï
Nous nâavons pas besoin dâune réécriture complĂšte des modules existants.
Au lieu de cela, nous pouvons introduire la Clean Architecture graduellement, en commençant par de nouvelles fonctionnalités ou des refactorisations ou le faire sur des nouveaux projets.
Adoption sur les Nouveaux Projetsï
Pour les nouveaux projets, nous recommandons dâintĂ©grer la Clean Architecture dĂšs le dĂ©part :
Ătape 1 : Initialiser le projet avec une structure claire (domain, application, infrastructure, interface) dans chaque modules dans src/modules.
Ătape 2 : DĂ©finir les premiĂšres fonctionnalitĂ©s du projet (par exemple, authentification, gestion des utilisateurs) en suivant systĂ©matiquement ce modĂšle architectural.
Ătape 3 : Ătablir des conventions et des templates de code pour garantir la cohĂ©rence dĂšs le dĂ©but.
Ătape 4 : Former lâĂ©quipe sur ces principes avant le dĂ©marrage du dĂ©veloppement. Adoption sur les Projets Existants
Pour les projets dĂ©jĂ en cours, une approche progressive est prĂ©fĂ©rable :ï
Ătape 1 : CrĂ©er la nouvelle structure (domain, application, infrastructure, interface) pour chaque nouveau module dans src/modules en parallĂšle du code existant.
Ătape 2 : ImplĂ©menter les nouvelles fonctionnalitĂ©s en suivant lâArchitecture Propre.
Ătape 3 : Refactoriser progressivement les modules critiques ou frĂ©quemment modifiĂ©s.
Ătape 4 : Ăvaluer les rĂ©sultats â clartĂ©, testabilitĂ© et vitesse de dĂ©veloppement.
Si les rĂ©sultats sont positifs, nous Ă©tendons le modĂšle Ă dâautres parties de lâapplication au fil du temps.