Я пытаюсь создать систему компонентов в Ruby, используя шаблон наблюдателя.Компоненты должны быть определены как модули, потому что они существуют только для смешивания в ComponentContainer
.Но есть определенные методы, которые есть у Component
, которые я в идеале хотел бы определить в каком-то базовом классе, но я не могу этого сделать, поскольку они являются модулями.
Вот что яя хотел бы сделать:
module Component
def self.on(event, &block)
#definition..
end
def self.fire(event)
#pass event to subscribers
end
end
module FooComponent < Component
on :foo_event do |param1, param2|
#...
end
end
Различные типы Component
s используют методы on
и fire
, но они не могут их наследовать, потому что у модулей не может быть родителей.Что я должен делать?Разве это не похоже на рубин?
Я мог бы заставить это работать, создав классы Component
и FooComponent
, но тогда я не могу смешать их в ComponentContainer
, используя extend
или include
.