私はお互いにコミュニケーションが必要なクラスを持っています。問題は、一方が他方(親の親の関係)を含むようにすると、物事が難しくなるということです。親のインスタンスを子に渡す必要があります(依存性注入を使用している場合は最初に作成します)か、代理人/イベントを使用できます。しかし、私は、親が子どもが育てるイベントに対処できなければならないという事実を強制したい。それをどうやって行うかについてはあまりよく分かりません。私はまた、イベントに複数の加入者を望んでいません。クラス間の双方向通信に最適なパターンは何ですか?
親子関係は、双方向通信では間違っていると感じます。残念ながら、オブジェクトの1つが常に始まり、もう1つが応答するケースではありません。いずれかが開始でき、もう一方は応答する必要があります。
もう1つのパターンがありますか?
更新日: 申し訳ありませんが、これは説明が難しいです。あるクラスが別のクラスにメッセージを送信したときに、即座にその応答を期待していないときに追加することを忘れました。レスポンスは非同期的に発生します。そのため、正しいメソッドを呼び出すために親のインスタンスが必要であるか、デリゲート/イベントが必要です。申し訳ありませんが、以下の例は疑似コードです。うまくいけば、アイデアを得るだけで十分です。私は仲介者のパターンを見なければならない。
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
}
}
ここでイベントを使用したくないということは、子供の違いは何ですか? –
子と親のコード例を追加できますか? – jgauffin
おそらく、あなたが実際にどのようなオブジェクトを親や子供として参照しているかを記述すると役に立ちます。子供が親を知っていれば必ずしも悪いとは限りません。 TreeView、XmlNodeなどの多くのケースがあり、Observerも非常に実行可能なオプションです。なぜあなたは「私もイベントに複数の加入者を望んでいない」と言っているのか分かりません。それについても説明できますか? –