Açıklama: Ben size yaklaşmak istiyorum nasıl bağlı event_aggregator
mücevher
devamlılaştırıcısı duyuyorum Sorun, potansiyel olarak bir etkinlik topluluğu kullanabilir entegratör. Bu şekilde belirli bir türdeki mesajları yayınlayabilir ve daha sonra nesnelerin almasını istediğiniz türleri dinleyebilirsiniz. Bu bazı durumlarda normal olaylardan daha iyi olabilir, çünkü nesneleriniz arasında çok gevşek bir kavrama elde edersiniz. Etkinlik yapımcısı ve dinleyicinin diğerine bir referans göndermesine gerek yoktur.
Size event_aggregator
adlı bu konuda yardımcı olan bir mücevher var. Bununla beraber aşağıdakileri yapabilirsiniz:
#!/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
varsayılan olarak eşzamansız olduğunu unutmayın, bu yüzden sadece bu senaryoyu yürütmek etkinliklerinüzerine geçirilen önce komut çıkmak olabilir. zaman uyumsuz davranış kullanımını devre dışı bırakmak için:
EventAggregator::Message.new("MessageType1", ["Some Stuff",2,3], false).publish
#The third parameter indicates async
Umarım bu senin durumunda ben Gözlemci Tasarım Desen kullanmak istiyorum
yararlı olabilir. – Ash