Soy un codificador de Ruby. Para mí, monkeypatching es cambiar, en tiempo de ejecución, métodos de clases o módulos en un proyecto externo. Lo que me interesa, es qué mecanismo tiene en su lugar que lo protegerá de algunos de los abusos de esa bonita función. Sigue, algunos escenarios que he encontrado, donde monkeypatching me ha mordido.¿Cómo maneja Smalltalk con monkeypatching?
Aunque no conozco Smalltalk en absoluto, ese lenguaje ha estado allí mucho antes que Ruby. Hice algunas investigaciones para ver si Smalltalk resolvió algunos de estos problemas y cómo lo hizo, pero no encontró mucho en Google. Así que aquí estoy, preguntando por Smalltalkers si pueden compartir su sabiduría.
Escenario A: bug fijación conflicto
Proyecto A y B dependen de proyecto C. Proyecto C tiene un error. Los lanzamientos del Proyecto A y B contienen una solución para el proyecto C.
Si su código usa el Proyecto A y B, ¿cómo puede saber que los parches no entrarán en conflicto?
Escenario B: insecto anticuado fijación de
Proyecto C libera una versión menor fija de su proyecto.
Si carga el proyecto A, ¿aún se aplicará el parche, con posible rotura? Me interesa saber si hay algún mecanismo en funcionamiento, por ejemplo, para no cargar el parche si el código está solucionado.
Escenario C: extensiones en conflicto
Proyecto A y B proyecto de uso de clase C de Foo. Ambos agregan un método de utilidad a Foo, digamos, #toDate. La versión toDate de A devuelve una cadena de fecha y la de B un objeto Fecha.
Si carga ambos proyectos (con C dep), ¿hay algún mecanismo que advierta/prevenga el conflicto? ¿O tendrá que esperar hasta que el tiempo de ejecución arroje un error debido a una expectativa incorrecta en un método?
Sobre la actualización pregunta
La lectura de las respuestas, se dan cuenta de que mi pregunta era demasiado amplio y vago. Así que aquí hay una versión reescrita de esto.
es la capacidad de monkeypatch realmente un problema? – CookieOfFortune
Sus críticas al monopatching parecen bastante lejanas. No hay nada inherente en el monopatching que conduzca a abstracciones que goteen más que en el diseño inicial de la clase. Tampoco es intrínsecamente más "difícil" que otros códigos. Dividir un objeto en diferentes archivos es cierto, aunque algunos argumentarían que tener módulos manejables es algo bueno; de hecho, se considera una buena práctica agrupar la funcionalidad relacionada en Objective-C. Quizás sus problemas son más con los codificadores que con las características del lenguaje. – Chuck
En cualquier cae, la noción de dividir cosas en archivos separados está fuera de lugar; smalltalk no hace las cosas de esa manera. –