Sono un programmatore Ruby. Per me, monkeypatching è quello di modificare, in fase di runtime, i metodi di classi o moduli in un progetto esterno. Quello che mi interessa, è quale meccanismo hai in atto che ti proteggerà da alcuni degli abusi di quella bella funzionalità. Segue, alcuni scenari che ho incontrato, in cui la monkeypatching mi ha morso.Come si comporta Smalltalk con monkeypatching?
Mentre io non so Smalltalk a tutti, che il linguaggio sono stati lì a lungo prima di Ruby. Ho fatto qualche ricerca per vedere se e come Smalltalk ha risolto alcuni di questi problemi ma non ha trovato molto su Google. Quindi eccomi qui, a chiedere a Smalltalkers se possono condividere la loro saggezza.
Scenario A: bug fixing conflitto
Progetto A e B dipendono progetto C. Progetto C ha un bug. Progetto A e rilascia B contengono una correzione per il progetto C.
Se il codice utilizza Progetto A e B, come è possibile conoscere le patch non saranno in conflitto?
Scenario B: bug superata fissaggio
Progetto C rilascia una versione fissa minore del loro progetto.
Se si carica progetto A, sarà la patch ancora essere applicato, con un potenziale di rottura? Sono interessato a sapere se ci sono alcuni meccanismi in atto, ad esempio, per non caricare la patch se il codice è stato risolto.
Scenario C: conflitto estensioni
Progetto A e B l'uso progetto di classe di C Foo. Entrambi aggiungono un metodo di utilità a Foo, ad esempio #toDate. La versione toDate di A restituisce una stringa di data e quella di B a Date.
Se si carica entrambi i progetti (con C dep), c'è un meccanismo che avvisa/impedire che il conflitto? O dovrai aspettare fino a quando il runtime genera un errore a causa di un'aspettativa sbagliata in un metodo?
Chi l'aggiornamento domanda
Leggendo le risposte, mi rendo conto la mia domanda era troppo ampio e vago. Quindi ecco una versione riscritta di esso.
è la capacità di monkeypatch davvero un problema? – CookieOfFortune
Le tue critiche alla monkeypatching sembrano piuttosto lontane dal marchio. Non c'è nulla di intrinseco nel monkeypatching che porti a astrazioni che perdono nulla più che nella progettazione di classi iniziali. Né è intrinsecamente più "crufty" di altri codici. La suddivisione di un oggetto in file diversi è vera, anche se alcuni sostengono che avere moduli gestibili è una buona cosa - infatti, è considerato una buona pratica raggruppare le funzionalità correlate in Objective-C. Forse i tuoi problemi sono più con i programmatori che con le caratteristiche del linguaggio. – Chuck
In qualsiasi cae, l'intera idea di dividere le cose in file separati è malriposta; smalltalk non fa le cose in questo modo. –