Ruby“Base”类

时间:2010-09-21 07:20:12

标签: ruby

在Ruby中命名类“Base”似乎很常见。我不确定为什么,也不确定我的感受。

例如,考虑ActiveRecordActiveRecord是一个包含许多类的模块,例如ObserverMigration,以及一个名为Base的类。这有什么好处,而不是拥有包含ActiveRecordObserver的{​​{1}}类?

Migration

VS

class ActiveRecord

  class Observer
    [...]
  end

  class Migration
    [...]
  end

end

1 个答案:

答案 0 :(得分:23)

Base类通常用于标识抽象类,旨在由开发人员在具体类中进行扩展和实现。

例如,ActiveRecord::Base是Rails项目中任何Active Record模型的抽象类。模型看起来像

class User < ActiveRecord::Base
end

同样,Observer定义了自己的Observer::Base和动作控制器定义ActionController::Base,它在Rails项目中立即由ApplicationController::Base实现。

Ruby没有提供和语言级关键字或语法来定义抽象类。从技术上讲,ActiveRecord::Base它不是一个真正的抽象类,但是对于这种模式使用Base是一种惯例。