Le Monkey Patching (fr)
Dans cet article, je vais tâcher de présenter une pratique de programmation douteuse appelée le « Monkey Patching », ou la « modification du singe » (aussi appelée le « Guérilla Patching ». Ainsi que de développer son intérêt dans la rédaction de scripts pour le logiciel RPG Maker.
Commentaires
Vous devez
vous inscrire
ou
vous connecter
pour poster un commentaire
Je ne partage que partielement le jugement fait dans cet article. Pour moi l'appréciation du comportement d'un objet Ruby se fait au regard du "Duck Typing" plus qu'à la lecture du code.
Ceci dit, quand plusieurs librairies se mettent a patcher les même choses, cela peut devenir instable.
J'attend beaucoup du raffinement (http://bugs.ruby-lang.org/issues/show/4085) qui verra le jour dans Ruby 2.0 et qui devrait mettre un peu d'ordre.
Il y a plus de 12 ansJe pense qu'il parle de raisonnement de code et non d'appréciation de comportement d'objets, cependant, ce n'est que son avis :)
Il y a plus de 12 ansEt ça reste quand même super pratique pour corriger des bugs à chaud en attendant la correction officielle :
Il y a plus de 12 anshttp://www.slideshare.net/nledez/breizhcamp-nosql
Il ne faut pas non plus oublié la possibilité (quand c'est possible) de ne modifier qu'une instance d'objet plutôt que le classe.
module AdditionalMethods
def new_method
"do some things"
end
end
obj = SomeObject.new
obj.extend(AdditionalMethods)
puts obj.new_method
Il y a plus de 12 ans#> "do some things"
c'est mieux avec in gist :
Il y a plus de 12 anshttps://gist.github.com/2771343
"Je défend le padawan :)"
Il y a plus de 12 ansIl parle de raisonnement de code, pas d'utilité :)
Alors si on parle de raisonnement de code, je pense qu'il faudrait être vraiment vicieux pour faire du monkey patching sur son propre code.
Le refactoring c'est pas fait pour les autruches quand même :-)
C'est toujours bien de dire les choses ... et bon ... on va dire qu'il les à dites dans son article :-p
Il y a plus de 12 ansEn fait, je ne conçois pas de MP hors de l'initialisation de mon "programme". Dans quels cas l'utilisez-vous ?
Il y a plus de 12 ansUn autre exemple de Monkey Patch là-dedans :
Il y a plus de 12 anshttp://www.slideshare.net/nledez/introduction-ruby-ms-techdays-2012
Comme d'habitude, il y ale fond et il y a la forme. Le Monkey Parching dans Ruby est un outil de plus pour les développeurs. Un outil très efficace et très coupant. On ne peut pas blamer l'utilisation de cet outil magré le fait que beaucoup de gens se coupent avec mais c'est vrai que quelques précautions sont de rigueurs. personnellement, l'Utilisation la plus courante du Monkey Patching c'est le bugfix en attendant une mise à jour d'une gem tierce, l'ajout de méthodes de classes dans ActiveRecord::Base (pour faire des mini "acts_as_XXX" ) ou l'ajout de helpers dans mes tests.
Il y a plus de 12 ansConcernant la manière maintenant : je fais un module séparé contenant mes changements et mon Monkey Patching consiste uniquement en l'envoi de "extend" ou "include" de mon module sur sa target. Ce me permet de très facilement désactiver le patch si nécessaire (par exemple quand le bug est corrigé dans la lib tierce)
Pour ma part, il m'arrive de patcher certaines classes, mais uniquement quand un héritage est impossible. Le plus souvent je le fait à des fin de debug ou de mocking.
Il y a plus de 12 ansComme pour Phile VE, je cré mes patch dans un module séparé et j'active ou non le patch (via extend) en fonctions de paramètres de config et de l'environement (dev, test, prod).