Класс против модуля при разработке Ruby API?

Когда я читал больше о метапрограммировании Ruby, большую часть времени мы находили по крайней мере два решения для решения проблемы. Пожалуйста, посмотрите на два примера ниже:

class Base
  def self.has_many(*args)
    # ...
  end
end

class Student < Base
  has_many :books
end

Другой стиль:

module Base
  def self.included(klass)
    klass.extend ClassMethods
  end

  module ClassMethods
    def has_many(*args)
      # ...
    end
  end
end

class Student
  include Base

  has_many :books
end

Но когда мы разрабатываем api, мы должны решить, какой из них использовать, но я хотел бы спросить ваши идеи и некоторые из лучших практик, которые большинство людей уже реализовали в их библиотеках.

7
задан edgerunner 17 November 2010 в 08:47
поделиться