Résumé des principes de conception

Comme précisé en introduction, les principes s'articulent en trois groupes principaux :

  1. Gestion des évolutions et des dépendances entre classes,
  2. Organisation de l'application en modules,
  3. Gestion de la stabilité de l'application.

Voici les principales leçons à retenir pour chacun de ces groupes :

Gestion des évolutions et des dépendances entre classes

Principe d'ouverture/fermeture
Open-Closed Principle (OCP)

Principe de substitution de Liskov
Liskov Substitution Principle (LSP)

Principe d'inversion des dépendances
Dependency Inversion Principle (DIP)

Principe de séparation des interfaces
Interface Segregation Principle (ISP)

Il faut :

  • Isoler les parties génériques/réutilisables de l'application en les faisant reposer uniquement sur des classes d'interface,
  • Considérer l'héritage comme une implémentation d'interface, la classe dérivée pouvant se "brancher" dans n'importe quel code qui utilise cette interface (l'interface forme alors un contrat entre le code utilisateur et les classes dérivées),
  • Utiliser des classes d'interfaces pour créer des pare-feu contre la propagation des changements,
  • Construire les parties "techniques" de l'application sur les parties "fonctionnelles", et non l'inverse,
  • Utiliser l'héritage multiple pour décomposer les interfaces complexes en interfaces simples correspondant chacune à un service spécifique. Une classe donnée peut ensuite proposer plusieurs services simultanément en implémentant les interfaces correspondantes.

Organisation de l'application en modules

Principe d'équivalence livraison/réutilisation
Reuse/Release Equivalence Principle (REP)

Principe de réutilisation commune
Common Reuse Principle (CRP)

Principe de fermeture commune
Common Closure Principle (CCP)

Il faut :

  • Décomposer l'application en packages pour gérer correctement les versions et permettre une réelle réutilisation,
  • Regrouper dans un même package les classes qui sont utilisées ensemble et qui sont impactées par les mêmes changements.

Gestion de la stabilité de l'application

Principe des dépendances acycliques
Acyclic Dependencies Principle (ADP)

Principe de relation dépendance/stabilité
Stable Dependencies Principle (SDP)

Principe de stabilité des abstractions
Stable Abstractions Principle (SAP)

Il faut :

  • Organiser les modules en un arbre de dépendances (en supprimant donc tout cycle dans le graphe des dépendances),
  • Placer les packages les plus stables à la base de l'abre,
  • Placer les interfaces dans les packages les plus stables.