Aller au contenu principal

La complexité et les patterns

La complexité et pourquoi les patterns25 min

Mettre la complexité au bon endroit, sans sortir un pattern trop tôt.

Dans cette leçon

Plusieurs façons d'être complexe

« Complexe » ne veut pas seulement dire « lent ». Un programme peut répondre vite et rester pénible à modifier, à tester ou à expliquer à un collègue.

Ce qui devient complexeCe que vous observezQuestion utile
Travail de la machineLectures, écritures, copies, comparaisonsCombien d'opérations réelles sont faites ?
CodeBranches, classes et dépendances se multiplientCombien d'endroits portent la décision ?
Charge mentaleIl faut garder trop de détails en tête pour changer une ligneQuel détail peut rester derrière un contrat ?
CoordinationUn changement oblige plusieurs personnes ou fichiers à bouger ensembleQui possède cette responsabilité ?

Le réflexe

Avant de chercher le nom d'un patron de conception, nommez la douleur. Une décision est-elle répétée ? Une classe connaît-elle trop de détails ? Une variante fuit-elle dans tous les clients ?

Les mêmes lignes, pas le même poids

Imaginez le même choix if + new dans cinq contrôleurs. Dix lignes répétées cinq fois pèsent plus que dix lignes réunies dans un seul endroit. Chaque nouveau canal impose cinq recherches, cinq modifications et cinq occasions d'oublier un cas.

WelcomeController.java

Le code de choix n'a pas disparu. Il vit désormais dans la fabrique. Le contrôleur ne connaît plus que deux gestes utiles : demander un expéditeur, puis envoyer le message.

Déplacer n'est pas supprimer

Un pattern ne rend pas automatiquement le programme plus rapide et ne retire pas la décision. Il choisit l'endroit où cette décision sera comprise, testée et modifiée.

Donner une adresse à la difficulté

  1. Gardez un petit contrat côté client

    Le client demande l'opération dont il a besoin. Il ne charge pas les détails de construction ou les variantes concrètes.
  2. Regroupez la responsabilité qui varie

    La partie riche a une adresse. Un changement local reste local tant que le contrat tient.
  3. Acceptez le coût là où il apporte quelque chose

    Une interface et plusieurs classes ajoutent de la navigation. Ce prix n'est utile que s'il réduit une douleur réelle ailleurs.

Dans une équipe, plusieurs personnes se partagent les responsabilités. Quand vous travaillez seul, ces responsabilités ne disparaissent pas : vous devez toutes les assumer, mais pas toutes en même temps. Vous portez plusieurs casquettes. Quand vous utilisez la fabrique, vous pouvez vous concentrer sur son utilisation sans remettre la casquette de sa conception ni recharger tous ses détails.

Le bon moment pour un pattern

Le pattern répond à une douleur présente

  • • La même décision est recopiée.
  • • Une responsabilité change pour plusieurs raisons.
  • • Des variantes réelles doivent respecter le même contrat.
  • • Le code client connaît des détails qu'il ne devrait pas porter.

Le pattern arrive trop tôt

  • • Deux cas triviaux sont stables et lisibles.
  • • Les couches n'ont aucune douleur précise à résoudre.
  • • Le choix vient seulement d'un hypothétique « peut-être un jour ».
  • • Le nom du pattern arrive avant le problème.

Sortez un pattern dès qu'il devient utile, pas dès qu'il devient possible.

Vérifiez le raisonnement

Vérifiez vos réflexes

Une réponse par question. La correction apparaît tout de suite.

1. Quel est le gain principal d'un patron de conception ?
2. Un choix if + new est répété dans cinq clients. Quelle première amélioration est cohérente ?
3. Après centralisation, où se trouve la complexité du choix ?
4. Pourquoi séparer les responsabilités reste-t-il utile quand vous travaillez seul ?
5. Deux cas stables tiennent en quelques lignes sans duplication. Que faire ?

Continuez le parcours

Centre de commandes

Rechercher une page et s'y rendre