📙 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);
  }
}

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.

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 :

  1. Choisir un projet Ă  venir.

  2. L’implĂ©menter en utilisant la Clean Architecture.

  3. Examiner les rĂ©sultats ensemble avant de dĂ©cider de l’appliquer plus largement.


Préparé par :
Ouatedem David
Ingénieur Logiciel