在Ruby中命名类“Base”似乎很常见。我不确定为什么,也不确定我的感受。
例如,考虑ActiveRecord。 ActiveRecord
是一个包含许多类的模块,例如Observer
和Migration
,以及一个名为Base
的类。这有什么好处,而不是拥有包含ActiveRecord
和Observer
的{{1}}类?
Migration
VS
class ActiveRecord
class Observer
[...]
end
class Migration
[...]
end
end
答案 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
是一种惯例。