开发者

Ruby "Base" classes

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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜