私はRabbitMQを使ってアプリケーション(RPC)間の通信を行っていますが、私は必要な方法を呼び出すための適切な方法について何かジレンマがあります。私は利用可能なメソッドの束を含むクラスがあり、私はラビットメッセージで運ばれた文字列に一致するものを実行する必要があります。Method.Invoke()vsスイッチ
オプション1: HEREの方法を使用すると、はるかにクリーンで見やすくなりますが、それに対して何かがあるかどうかは疑問です。例えばパフォーマンスの低下、悪い習慣など
var method = this.GetType().GetMethod(methodNameString);
method.Invoke(this, messagebody);
オプション2: あなたが同じ場所にあるすべての可能なアクションを保つためにDictionary<string, Action>
を使用して試すことができますスイッチ
switch(methodNameString)
case: method1
method1();
case: method2
method2();
...
非常に高速でなければなりませんか? methodNameStringは(オブジェクトの任意のメソッドを呼び出すことができるため)外部システムから提供されていますか? – Chet
私の心配は、メッセージキューから名前が来る任意のランダムメソッドを陽気に呼び出すことです。だから彼らが属しているクラスには何も持っていないことを確かめてください。しかし、それは簡単で明白です。私はスイッチよりもはるかに良く、 'Dictionaryよりも優れています。しかし、私は洞窟に住んでいて、私は火を恐れています。 –
@Chet外部エンティティからWebServiceを呼び出し、データのチェック(xsdなど)を渡してから、WebServiceがメッセージブローカー経由でWindowsサービスにコマンドを送信します。 –