- Monkey-Patch
-
Une Monkey-Patch (aussi nommé Monkey Patch, MonkeyPatch) traduit par modification-singe est une façon de modifier ou d'étendre du code qui sera exécuté sans modifier le code source original pour des langages de programmations dynamiques. Il s'applique aussi dans la modification des logiciels d'un système alors qu'il utilise un système de gestion de paquets.
La notion se nomme aussi :
- Guerilla patch
- Extension des classes précédemment déclarées
- Réouverture des classes
- Hijacking
Sommaire
Étymologie
Le terme Monkey-Patch a été utilisé premièrement sous l'appellation Guerilla Patch, qui fait référence à une modification furtive et sans aucune règle du code au moment de son exécution. Dans certaines applications (comme Zope 2) ces patches intéragissent les unes avec les autres ce qui a pour conséquence de créer une bataille pour déterminer laquelle modifiera le code.
Dû au fait que les mots guerilla et gorilla sonnent de la même façon, les gens ont commencé à utiliser le terme incorrect Gorilla Patch au lieu de Guerilla Patch. Quand un développeur de logiciel crée une Guerilla Patch, il essaie avec grande difficulté d'éliminer la bataille entre les patches et le terme Monkey-Patch fut donc la désignation pour cette sorte de modification de code.
Le terme Monkey-Patch est utilisé depuis.
Applications
La modification-singe est utilisée pour :
- Remplacer des méthodes, attributs ou fonctions au moment de l'exécution ;
- Modifier/étendre le comportement ou l'apparence d'un produit pour une tierce personne, sans maintenir sa propre copie du code source ;
- Appliquer un patch, au moment de l'exécution, à un objet en mémoire, sans l'appliquer au code source sur disque ;
- Correction d'un comportement ou d'un trou de sécurité qui réside dans le code source original (un exemple est dans la façon de distribuer une correction en tant qu'ajout dans la plate forme Ruby on Rails).
Pièges
L'utilisation de la modification-singe comporte les problèmes suivants :
- Si le produit ou le paquet modifié change avec une nouvelle version, celle-ci va très certainement détruire votre patch ;
- Si deux modules essaient de faire une modification-singe sur une même méthode, seule la dernière va "gagner" la bataille et l'autre n'aura aucun effet ;
- Si la modification-singe crée une différence entre le code source original et celui qui s'exécute, la résolution de conflits et de bogues devient très difficile, en particulier lorsque l'on n'est pas l'auteur du patch ;
- L'utilisation de la modification-singe peut conduire à des problèmes de mise-à-jour car les modifications faites sur le code peuvent se baser sur des postulats devenant faux avec l'évolution du code.
Voir aussi
Wikimedia Foundation. 2010.