2010-09-21 20 views
16

Ruby'de "Base" sınıflarını adlandırmak olağan bir durum gibi görünüyor. Neden olduğundan ve nasıl hissettiğimi bilmiyorum. Örneğin, ActiveRecord numaralı telefonu ele alalım. ActiveRecord, Observer ve Migration gibi bir dizi sınıfın yanı sıra Base adlı bir sınıfı içeren bir modüldür. Observer ve Migration içeren ActiveRecord sınıfına sahip olmanın aksine bunun yararı nedir?Ruby "Temel" sınıfları

class ActiveRecord 

    class Observer 
    [...] 
    end 

    class Migration 
    [...] 
    end 

end 

module ActiveRecord 

    class Base 
    [...] 
    end 

    class Observer 
    [...] 
    end 

    class Migration 
    [...] 
    end 

end 

cevap

23

vs Base sınıfı, yaygın haliyle, bir soyut bir sınıfının tanımlanması için kullanılan genişletilebilir ve geliştirici bir beton sınıfı uygulanmak üzere tasarlanmıştır. Örneğin, ActiveRecord::Base, bir Rails projesindeki herhangi bir Active Record modelinin özet sınıfıdır.

class User < ActiveRecord::Base 
end 

Aynı şekilde, ObserverObserver::Base kendi tanımlar gibi bir model görünüyor ve Eylem Kontrolörü Rails projesinde hemen ApplicationController::Base tarafından uygulanan, ActionController::Base tanımlar.

Ruby, soyut sınıfları tanımlamak için dil düzeyinde bir anahtar kelime veya sözdizimi sağlamaz. Teknik olarak, ActiveRecord::Base gerçek bir soyut sınıf değil, bu desen için Base'u kullanmak bir tür sözleşmedir.