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

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 ans

Je 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 ans

Et ça reste quand même super pratique pour corriger des bugs à chaud en attendant la correction officielle :
http://www.slideshare.net/nledez/breizhcamp-nosql

Il y a plus de 12 ans

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
#> "do some things"

Il y a plus de 12 ans


"Je défend le padawan :)"
Il parle de raisonnement de code, pas d'utilité :)

Il y a plus de 12 ans

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 ans

En 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 ans


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.
Concernant 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)

Il y a plus de 12 ans

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.
Comme 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).

Il y a plus de 12 ans
Vous devez vous inscrire ou vous connecter pour poster un commentaire