У меня есть классы, которые должны общаться друг с другом. Проблема в том, что если вы сделаете так, чтобы одно содержало другое (отношения родитель-потомок), то все становится хитро Вам либо нужно передать экземпляр родительского объекта дочернему элементу (затем какой из них вы создадите первым, если вы используете внедрение зависимостей), или вы можете использовать делегаты / события. Но я хочу обеспечить тот факт, что родитель должен иметь возможность обрабатывать событие, которое вызывает ребенок. Не слишком уверен, как это сделать. Я также не хочу нескольких подписчиков на событие.
Отношения между родителями и детьми просто кажутся неправильными для двустороннего общения. К сожалению, это не тот случай, когда один из объектов всегда инициирует, а другой отвечает. Каждый может инициировать, а другой должен ответить.
Есть ли другой шаблон, который мне не хватает?
UPDATE:
Извините, это довольно сложно объяснить. Я забыл добавить, что когда один класс отправляет сообщение другому, он не ожидает немедленного ответа. Ответ поступает асинхронно, поэтому вам необходим экземпляр родительского элемента для вызова правильного метода или делегат / событие. Извините, пример ниже - псевдокод. Надеюсь, этого достаточно, чтобы понять. Должен ли я посмотреть на образец посредника.
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
}
}