Подтвердить что ты не робот

Рубиновые "базовые" классы

Кажется обычным назвать классы "Base" в Ruby. Я не уверен, почему и как я к этому отношусь.

Рассмотрим, например, ActiveRecord. ActiveRecord - это модуль, который содержит ряд классов, таких как Observer и Migration, а также класс под названием Base. Какая польза от этого, в отличие от наличия класса ActiveRecord, который содержит Observer и Migration?

class ActiveRecord

  class Observer
    [...]
  end

  class Migration
    [...]
  end

end

против

module ActiveRecord

  class Base
    [...]
  end

  class Observer
    [...]
  end

  class Migration
    [...]
  end

end
4b9b3361

Ответ 1

Класс Base обычно используется для идентификации абстрактного класса, который должен быть расширен и реализован разработчиком в конкретном классе.

Например, ActiveRecord::Base является абстрактным классом для любой модели Active Record в проекте Rails. Модель выглядит как

class User < ActiveRecord::Base
end

Аналогично, Observer определяет свой собственный Observer::Base, а Action Controller определяет ActionController::Base, который в проекте Rails сразу реализуется ApplicationController::Base.

Ruby не предоставляет ключевое слово или синтаксис на уровне языка для определения абстрактных классов. Технически говоря, ActiveRecord::Base это не настоящий абстрактный класс, но это своего рода соглашение использовать Base для этого шаблона.