Disclosure: Io sono il manutentore del event_aggregator
gemma
A seconda di come si desidera avvicinarsi al problema che potresti potenzialmente utilizzare un aggregato di eventi ator. In questo modo puoi pubblicare messaggi di un certo tipo e poi far ascoltare i tuoi oggetti ai tipi che vuoi che vengano ricevuti. Questo può in certi casi essere migliore degli eventi normali perché si ottiene un accoppiamento molto lento tra gli oggetti. Il produttore e l'ascoltatore di eventi non devono condividere un riferimento all'altro.
C'è una gemma che ti aiuta con questo chiamato event_aggregator
. Con esso è possibile effettuare le seguenti operazioni:
#!/usr/bin/ruby
require "rubygems"
require "event_aggregator"
class Foo
include EventAggregator::Listener
def initialize()
message_type_register("MessageType1", lambda{|data| puts data })
message_type_register("MessageType2", method(:handle_message))
end
def handle_message(data)
puts data
end
def foo_unregister(*args)
message_type_unregister(*args)
end
end
class Bar
def cause_event
EventAggregator::Message.new("MessageType1", ["Some Stuff",2,3]).publish
end
def cause_another_event
EventAggregator::Message.new("MessageType2", ["Some More Stuff",2,3]).publish
end
end
f = Foo.new
b = Bar.new
b.cause_event
b.cause_another_event
# => Some Stuff
2
3
# => Some More Stuff
2
3
essere consapevoli che è asincrono per impostazione predefinita, quindi se si esegue solo questo script lo script potrebbe uscire prima che siano passati degli eventi. Per disabilitare l'uso comportamento asincrono:
EventAggregator::Message.new("MessageType1", ["Some Stuff",2,3], false).publish
#The third parameter indicates async
Speriamo che questo può essere utile nel vostro caso
voglio usare il pattern Observer Design. – Ash