It seems commonplace to name classes “Base” in Ruby. I’m not sure why, nor how I feel about it.
Consider, for example, ActiveRecord. ActiveRecord is a module that contains a number of classes such as Observer and Migration, as well as a class called Base. What’s the benefit of this, as opposed to having an ActiveRecord class that contains Observer and Migration?
class ActiveRecord
class Observer
[...]
end
class Migration
[...]
end
end
vs
module ActiveRecord
class Base
[...]
end
class Observer
[...]
end
class Migration
[...]
end
end
The
Baseclass is commonly used to identify an abstract class, intended to be extended and implemented in a concrete class by the developer.For instance,
ActiveRecord::Baseis the abstract class for any Active Record model in a Rails project. A model looks likeLikewise,
Observerdefines its ownObserver::Baseand Action Controller definesActionController::Basewhich, in a Rails project, is immediately implemented byApplicationController::Base.Ruby doesn’t provide and language-level keyword or syntax to define abstract classes. Technically speaking,
ActiveRecord::Baseit’s not a real abstract class, but it’s a kind of convention to useBasefor this pattern.