tags:

views:

68

answers:

2

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
A: 

I think you have to understand the purpose of modules in ruby, there's a chapter about it in the ruby way: http://books.google.com/books?id=ows9jTsyaaEC&lpg=PP1&dq=the%20ruby%20way&hl=fr&pg=PA37#v=onepage&q&f=false (see the modules an mixins part)

hellvinz
+4  A: 

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.

Simone Carletti