2010-09-21 16 views
16

Wydaje się powszechne nazywać klasy "Base" w Ruby. Nie jestem pewien dlaczego, ani jak się z tym czuję.Ruby "Base" classes

Weź pod uwagę na przykład ActiveRecord. ActiveRecord to moduł zawierający szereg klas, takich jak Observer i Migration, a także klasa o nazwie Base. Jakie są tego zalety, w przeciwieństwie do klasy ActiveRecord, która zawiera Observer i Migration?

class ActiveRecord 

    class Observer 
    [...] 
    end 

    class Migration 
    [...] 
    end 

end 

vs

module ActiveRecord 

    class Base 
    [...] 
    end 

    class Observer 
    [...] 
    end 

    class Migration 
    [...] 
    end 

end 

Odpowiedz

23

Klasa Base jest powszechnie stosowany do określenia klasy abstrakcyjnej przeznaczone być rozszerzony i realizowane w konkretnej klasy przez autora.

Na przykład ActiveRecord::Base jest klasą abstrakcyjną dla dowolnego modelu rekordu aktywnego w projekcie Rails. Wzór wygląda

class User < ActiveRecord::Base 
end 

Podobnie Observer definiuje własny Observer::Base i Action Controller definiuje ActionController::Base, które w projekcie Rails, jest natychmiast realizowane przez ApplicationController::Base.

Ruby nie dostarcza słowa kluczowego i składni języka na poziomie języka do definiowania klas abstrakcyjnych. Technicznie rzecz biorąc, nie jest to prawdziwa klasa abstrakcyjna, ale jest to rodzaj konwencji, która pozwala używać tego wzoru jako Base.