Quando utilizzare i mixins in Ruby

3

Mi chiedo quando usare i mixin? Ho letto di loro. Molti autori li confrontano con interfacce, classi astratte, ecc.

I mixin sono moduli che sono misti e i moduli sono un modo per raggruppare metodi, costanti e classi simili.

Ho visto esempi in cui viene creato un modulo per le funzioni matematiche. Ha senso raggruppare e riutilizzare tali funzioni, ma dovrei mescolarle solo in una classe se mi trovo di fronte a una situazione di ereditarietà? Devo mescolare questi in qualsiasi momento li voglio usare in una classe?

Dovrebbero essere usati esattamente come interfacce in altre lingue o ci sono altre sottigliezze?

    
posta Gilles 17.06.2012 - 17:15
fonte

1 risposta

5

IMHO Suggerirei che sono più simili a classi astratte in Java che interfacce poiché includono codice eseguibile. Detto questo, si tratta più del riutilizzo attraverso la composizione che dell'ereditarietà.

Il vantaggio di un mixin è che non richiedono che tu erediti. Ciò significa che è possibile includere funzionalità senza influire sulla gerarchia degli oggetti. Significa anche che le classi non correlate possono avere codice comune.

Ad esempio, usare Mongoid non richiede di ereditare dalla sua classe:

class Band
  include Mongoid::Document
end

Questo rende la classe in grado di essere archiviata e trovata in MongoDB ma puoi comunque ereditare la tua eredità.

Forse prendi una lettura del link e dovrebbe diventare un po 'più chiaro.

    
risposta data 18.06.2012 - 09:08
fonte

Leggi altre domande sui tag