2010-09-21 6 views
16

Parece común nombrar las clases "Base" en Ruby. No estoy seguro de por qué, ni cómo me siento al respecto.Ruby "Base" clases

Considere, por ejemplo, ActiveRecord. ActiveRecord es un módulo que contiene varias clases como Observer y Migration, así como una clase llamada Base. ¿Cuál es el beneficio de esto, a diferencia de tener una clase ActiveRecord que contiene Observer y Migration?

class ActiveRecord 

    class Observer 
    [...] 
    end 

    class Migration 
    [...] 
    end 

end 

vs

module ActiveRecord 

    class Base 
    [...] 
    end 

    class Observer 
    [...] 
    end 

    class Migration 
    [...] 
    end 

end 

Respuesta

23

La clase Base se utiliza comúnmente para identificar una clase abstracta, destinado a ser extendido y aplicado en una clase concreta por el desarrollador.

Por ejemplo, ActiveRecord::Base es la clase abstracta para cualquier modelo de registro activo en un proyecto de Rails. Un modelo se parece

class User < ActiveRecord::Base 
end 

Asimismo, Observer define su propio Observer::Base y el controlador de acción define ActionController::Base que, en un proyecto de rieles, se implementa inmediatamente por ApplicationController::Base.

Ruby no proporciona palabras clave ni sintaxis a nivel de lenguaje para definir clases abstractas. Técnicamente hablando, ActiveRecord::Base no es una clase abstracta real, pero es una especie de convención usar Base para este patrón.

Cuestiones relacionadas