mono-aplicación de parches, al igual que muchas herramientas en la caja de herramientas de programación, se puede utilizar tanto para el bien como para el mal. La pregunta es dónde, en general, tales herramientas tienden a ser las más utilizadas. En mi experiencia con Ruby, el equilibrio pesa mucho en el lado "malvado".
Entonces, ¿qué es un "mal" uso de parche de mono? Bueno, el parche de monos en general te deja abierto a grandes enfrentamientos potencialmente no diagnosticables. Tengo una clase A
. Tengo algún tipo de módulo de reparación de monos MB
que parches A
para incluir method1
, method2
y method3
. Tengo otro módulo de reparación de mono MC
que también parches A
para incluir un method2
, method3
y . Ahora estoy en un aprieto Llamo al instance_of_A.method2
: ¿de quién se llama el método? La respuesta a eso puede depender de muchos factores:
- ¿En qué orden introduje los módulos de parcheo?
- ¿Los parches se aplican inmediatamente o en algún tipo de circunstancia condicional?
- AAAAAAARGH! ¡LAS ARAÑAS ESTÁN COMIENDO MI PELOTA DE OJO DESDE EL INTERIOR!
OK, por lo que # 3 es tal vez un poco demasiado melodramática ....
De todos modos, ese es el problema con el mono de parches: problemas en pugna horribles. Dada la naturaleza altamente dinámica de los lenguajes que generalmente lo respaldan, ya enfrenta muchos problemas potenciales de "acción espeluznante a distancia"; el parche de monos simplemente se suma a estos.
Tener parches para monos disponibles es bueno si eres un desarrollador responsable. Desafortunadamente, IME, lo que tiende a suceder es que alguien vea parches de mono y dice: "¡Dulce! Voy a aplicar un parche en lugar de verificar si otros mecanismos pueden no ser más apropiados". Esta es una situación más o menos análoga a las bases de código Lisp creadas por personas que buscan macros antes de que piensen simplemente hacerlo como una función.
FWIW, Hay una propuesta para incluir algo llamado "refinamientos" en Ruby 2.0 que mitigaría las trampas asociadas con el parche de monos. Solo google para "refinamientos de ruby", hay un par de artículos alrededor. –
[¿El mono parcheando el mal?] (Http://www.singhajit.com/is-ruby-monkey-patching-evil) –