Kiedy przeczytałem więcej o metaprogramowaniu Ruby, większość czasu znaleźliśmy co najmniej dwa rozwiązania, aby rozwiązać problem. Proszę spojrzeć na dwóch przykładach poniżej:Klasa vs Moduł w projektowaniu API Ruby?
class Base
def self.has_many(*args)
# ...
end
end
class Student < Base
has_many :books
end
inny styl:
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
ale kiedy zaprojektować api, musimy zdecydować, który z nich korzystać, ale chciałbym zadać swoje pomysły i niektóre najlepsze praktyki, które większość ludzi wdrożyła już w swoich bibliotekach.