Mam zajęcia, które muszą komunikować się ze sobą. Problem polega na tym, że jeśli jeden z nich zawiera drugi (relacja potomka dziecka), to sprawy stają się trudne. Musisz przekazać instancję elementu nadrzędnego do elementu potomnego (wtedy należy go najpierw utworzyć, jeśli używa się wtyczki zależności) lub można użyć delegatów/zdarzeń. Ale chcę egzekwować fakt, że rodzic musi być w stanie poradzić sobie z wydarzeniem, które dziecko rodzi. Nie jestem pewien, jak to zrobić. Nie chcę też wielu subskrybentów wydarzenia.Jaki jest najlepszy wzór dla dwukierunkowej komunikacji między zajęciami?
Relacja rodzic-dziecko jest po prostu niewłaściwa w przypadku komunikacji dwukierunkowej. Niestety nie jest tak, że jeden z obiektów zawsze inicjuje, a drugi odpowiada. Albo może zainicjować, a drugi odpowiedzieć.
Czy istnieje inny wzór, którego mi brakuje?
AKTUALIZACJA: Niestety jest to dość trudne do wyjaśnienia. Zapomniałem dodać, że gdy jedna klasa wysyła wiadomość do innej klasy, nie oczekuje natychmiastowej odpowiedzi. Odpowiedź przychodzi asynchronicznie, dlatego potrzebujesz instancji rodzica, aby wywołać właściwą metodę lub delegata/zdarzenie. Przykro nam, że poniższy przykład to pseudo kod. Mam nadzieję, że wystarczy, aby uzyskać pomysł. Czy powinienem spojrzeć na wzór mediatora?
public class Foo
{
public void SendMessageAToBar()
{
MessageA msg = new MessageA();
Bar.ReceiveMessageAFromFoo(msg);
}
public void ReceiveMessageARespFromBar(MessageAResp msgResp)
{
//Got a response do something
}
public void ReceiveMessageBFromBar(MessageB msg)
{
//Do something msg
MessageBResp msgBResp = new MessageBResp();
Bar.ReceiveMessageBRespFromFoo()
}
}
public class Bar
{
public void ReceiveMessageAFromFoo(MessageA msg)
{
//DO something.
MessageAResp resp = new MessageAResp();
Foo.ReceiveMessageARespFromBar(resp);
}
public void SendMessageBToFoo()
{
MessageB msg = new MessageB();
Foo.ReceiveMessageBFromBar(msg);
}
public void ReceiveMessageBRespFromFoo(MessageBResp msgResp)
{
//Got a response do something
}
}
Co różni dziecko, co oznacza, że nie chcesz tutaj korzystać z wydarzeń? –
Czy możesz dodać przykłady kodu dziecka i rodzica? – jgauffin
Może to pomoże, jeśli opiszecie, jakie rzeczywiste obiekty nazywacie rodzicami i dziećmi. Nie zawsze jest źle, jeśli dziecko ma prawo do rodzicielstwa. Istnieje wiele przypadków, takich jak TreeView, XmlNode itp., A także korzystanie z Observer jest również bardzo opłacalną opcją. Nie wiesz, dlaczego mówisz "Nie chcę też wielu subskrybentów wydarzenia". Czy możesz to wyjaśnić? –