Question

Quel est le problème avec l'extrait de code suivant ? Comment allez-vous procéder pour le refactoriser ?


Réponse

Les trois classes ci-dessus sont étroitement liées les unes aux autres. La classe de haut niveau CircusService dépend de la classe de niveau inférieur TigerHandler et le TigerHandler dépend à son tour de la classe de niveau inférieur TigerHelper. Toutes ces classes dépendent directement de l'implémentation par opposition à l'abstraction. Si dans le futur, le service de cirque doit traiter avec un éléphant au lieu d’un tigre, vous devrez changer la classe CircusService pour utiliser la nouvelle classe ElephantHandler au lieu du TigerHandler. Si vous souhaitez utiliser un ImprovedTigerHelper au lieu du TigerHelper, vous devrez changer toutes les classes Handler qui utilisent le TigerHelper. Si CircusService veut s'étendre à d'autres animaux, alors il y aura plus de changements à travers différentes classes. Cela montre que le code ci-dessus est rigide. Cette situation peut être améliorée en appliquant le principe d'inversion de dépendance.

Digital Growing Academy vous offre une formation gratuite sur les principes de développement POO , n'hésitez pas à y inscrire, c'est gratuit :) .

Le principe d'inversion de dépendance (DIP) stipule que :

  • Les modules de haut niveau ne doivent pas dépendre de modules de bas niveau. Les deux devraient dépendre des abstractions.
  • Les abstractions ne devraient pas dépendre des détails. Les détails doivent dépendre des abstractions.

Lorsque ce principe est appliqué, les classes de niveau supérieur ne travailleront pas directement avec les classes de niveau inférieur, mais avec une couche abstraite. Cela nous donne la flexibilité au prix d'un effort accru. Les classes qui sont moins susceptibles de changer n'ont pas besoin d'appliquer ce principe. L'application aveugle de ce principe peut rendre un système plus complexe.

Le code ci-dessus peut être amélioré en utilisant le principe d'inversion de dépendance (DIP) comme indiqué ci-dessous :

Définissez d'abord la couche d'abstraction.


Maintenant l'implémentation qui dépend de l'abstraction et pas l’inverse :



Pour plus de détails sur les principes de développement POO, vous pouvez s'inscrire sur notre formation gratuite Tips POO Vs PF pour réussir ton entretien Java.