Когда я читал больше о метапрограммировании 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, мы должны решить, какой из них использовать, но я хотел бы спросить ваши идеи и некоторые из лучших практик, которые большинство людей уже реализовали в их библиотеках.