8) Use Cases

Maintenant que nous sommes confiants vis-à-vis de nos tests nous allons pouvoir commencer à refactorer.

Step 8 : Use Cases

Nous pouvons démarrer en splittant notre principal hostpot : PartieDeChasseService.

Service Hotspot

Pour ce faire, nous allons utiliser la stratégie Divide and Conquer :

  • Prendre du temps pour comprendre ce qu'est la Clean Architecture

    • Notamment la notion de Use Case

  • Extraire 1 Use Case par méthode du Service

  • Améliorer la définition de notre architecture via nos tests Archunit

Extraire un premier Use Case

  • Utiliser les fonctionnalités de notre IDE pour extraire la méthode Démarrer

    • Refactor -> Extract -> Extract Class

    • Penser à configurer l'extraction de la méthode en Create delegating Wrapper

Extract class
  • Voici le résultat :

  • La classe PartieDeChasseService délègue maintenant les appels de la méthode Démarrer à notre Use Case

    • Ainsi, nous compilons et nos tests sont toujours au vert

  • On adapte les tests de ce Use Case

Répliquer cela pour tous les Use Cases

A la fin, le PartieDeChasseService ressemble à cela :

Supprimer le service

  • L'arborescence de notre projet ressemble désormais à celà :

  • Il ne reste plus qu'un seul appelant du srvice PartieDeChasseService -> ScenarioTests

  • Nous allons rediriger les appels des tests vers les Use Case

  • On peut maintenant supprimer la classe PartieDeChasseService de manière totalement safe

Remove Service
  • On place l'ensemble des Exceptions au plus proche de leur utilisation (dans le namespace UseCases)

Exceptions

Notre architecture ressemble maintenant à ça

Architecture

Mise à jour des règles ArchUnit

Impact sur l'analyse comportementale

Après avoir extrait les Use Cases, nous avons "tué" le hotspot identifié par codescene :

Hotspots mis à jour

Nous avons simplement divisé cette grosse classe "fourre-tout" en plus petites unités, avec des dépendances clairement identifiées qu'on va pouvoir tranquillement refactorer.

Nouveau rapport SonarCloud disponible ici.

Reflect

  • Quel est l'impact sur le design ? les tests ?

  • En quoi pouvons nous parler ici de Screaming Architecture ?

Last updated

Was this helpful?