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 Base
class is commonly used to identify an abstract class, intended to be extended and implemented in a concrete class by the developer.
For instance, ActiveRecord::Base
is the abstract class for any Active Record model in a Rails project. A model looks like
class User < ActiveRecord::Base
end
Likewise, Observer
defines its own Observer::Base
and Action Controller defines ActionController::Base
which, in a Rails project, is immediately implemented by ApplicationController::Base
.
Ruby doesn't provide and language-level keyword or syntax to define abstract classes. Technically speaking, ActiveRecord::Base
it's not a real abstract class, but it's a kind of convention to use Base
for this pattern.
精彩评论