だから私が持っていると言います:
public interface SystemA
{
void MethodA(string a, string b, int c);
}
そして私のアプリケーションのどこかで、
public class ClientA
{
public SystemA mSystemA;
public ClientA()
{
mSystemA.MethodA("whatever", "ok", 42);
}
}
しかし、次の要件を満たすように変更する方法を見つけようとしています。
- システム上のメソッドへの呼び出しは、特定の応答を受け取る場合と受け取らない場合があります
- 応答を期待するメソッドは、メソッドの再呼び出し、クライアントへの通知、システムへの通知など、送信後に経過した時間に基づいてさまざまなアクションをトリガーする場合があります。
- クライアントもメッセージを受信できる必要があります
- システム(または受信クライアント)のインターフェースだけを変更する必要があることを望んでいます。
- 最小限のオーバーヘッド
- シングルトンは再利用性を損ない、緊密な結合を作成するため、避ける
具体的には、リモート リソースとのやり取りを担当する 3 つのシステム (多くのシステムのうち) があり、それらのインターフェイスへの呼び出しに対して応答が得られるかどうか、または応答がいつ得られるか、または応答が有効 - システム自体とそれらを使用するクライアントでこれらのケースを処理することは、動作を具体的に割り当てる状態であっても非常に複雑です。
私が試したり検討したりして気に入らないこと:
- イベント システム - システムに公開する新しいメソッドごとに新しいイベントとリスナーを定義する必要があり、メソッドを変更するたびに、一致するすべてのイベント、すべてのリスナーなどを変更する必要があります。FAR もあります。それを使用すると多くのオーバーヘッドが発生します。指定したすべてのイベントに引数が必要だと指定すると、大量の作業が発生しますが、イベントを非常に一般的なものにすると、それらを一致させるために送信者と受信者の間を行ったり来たりする必要があります。
- コマンド - レシーバーのメソッドごとに新しいコマンドを定義する必要があり、メソッドが依存するメソッドを変更するたびに、コマンドを変更する必要があります。それに加えて、すべてのコマンドのコンストラクターはメソッドのシグネチャと一致する必要があります。これでもオーバーヘッドが多すぎると思います。
考え?