2010-09-21 19 views
16

Sembra comune classificare le classi "Base" in Ruby. Non sono sicuro del perché, né di quello che provo per questo.Ruby "Base" classes

Considerare, ad esempio, ActiveRecord. ActiveRecord è un modulo che contiene un numero di classi come Observer e Migration, nonché una classe denominata Base. Qual è il vantaggio di questo, al contrario di avere una classe ActiveRecord che contiene Observer e Migration?

class ActiveRecord 

    class Observer 
    [...] 
    end 

    class Migration 
    [...] 
    end 

end 

vs

module ActiveRecord 

    class Base 
    [...] 
    end 

    class Observer 
    [...] 
    end 

    class Migration 
    [...] 
    end 

end 

risposta

23

La classe Base è comunemente utilizzato per identificare una classe astratta, destinato ad essere ampliato e implementato in una classe concreta dallo sviluppatore.

Ad esempio, ActiveRecord::Base è la classe astratta per qualsiasi modello di record attivo in un progetto Rails. Un modello assomiglia

class User < ActiveRecord::Base 
end 

Allo stesso modo, Observer definisce il suo proprio Observer::Base e azione di controllo definisce ActionController::Base, che, in un progetto Rails, viene immediatamente attuata dai ApplicationController::Base.

Ruby non fornisce una parola chiave o una sintassi a livello di linguaggio per definire classi astratte. Tecnicamente parlando, ActiveRecord::Base non è una vera classe astratta, ma è una sorta di convenzione per utilizzare questo modello per Base.