2010-09-21 143 views
16

在Ruby中命名類「基」似乎很常見。我不知道爲什麼,也不知道我對此感覺如何。紅寶石「基」類

考慮,例如,ActiveRecordActiveRecord是一個包含多個類的模塊,例如ObserverMigration,以及一個名爲Base的類。這有什麼好處,而不是ActiveRecord類包含ObserverMigration

class ActiveRecord 

    class Observer 
    [...] 
    end 

    class Migration 
    [...] 
    end 

end 

VS

module ActiveRecord 

    class Base 
    [...] 
    end 

    class Observer 
    [...] 
    end 

    class Migration 
    [...] 
    end 

end 

回答

23

Base類通常用於識別一個抽象類,意在被延伸並通過顯影劑在一個具體的類來實現。

例如,ActiveRecord::Base是在Rails項目的任何活動記錄模型的抽象類。模型看起來像

class User < ActiveRecord::Base 
end 

同樣,Observer定義了自己的Observer::Base和動作控制器定義ActionController::Base其中,在Rails項目,立即被ApplicationController::Base實現。

Ruby不提供和語言級別的關鍵字或語法來定義抽象類。從技術上講,ActiveRecord::Base它不是一個真正的抽象類,但是這種模式使用Base是一種慣例。