私は未処理のバイナリメッセージ(非常に単純な、最初のバイトはメッセージタイプ、残りはペイロードです)を取り込むアプリで作業しています。私が達成しようとしているのは、ネットワーキングサービスがアプリケーションの他の部分から抽象化されていることを確認して、プロトコルを今すぐ変更して残りのアプリケーションにあまり影響を与えないようにすることです。 アプリケーションのコンテキストは非常にシンプルなクライアント/サーバーゲームです。私は今クライアントの仕事をしています。ネットワークプロトコルをカプセル化
私はちょっと苦労しています。私はちょうどかなりのオブジェクト(私は思う)を返すトランスレータ/アダプタサービスへの接続を投げるエレガントな方法を見つける必要があります。これらのオブジェクトは、アプリケーションの残りの部分で消費を待っているキューにスローされます。私が直面してる問題がある多かれ少なかれ、この構築物(擬似コード):
はのは、各メッセージが20バイトであると仮定しましょう、私は各20バイトのため、この関数の呼び出しに対処することができます:
public Message GetMessage(byte[] buffer)
{
switch(buffer[0])
{
case 1:
return Message1(...);
case 2:
return Message2(...);
.....
case n:
return MessageN(...);
}
}
を明らかに、私はケースの列挙型または定数を使用しますが、それは私を悩ませていることではありません。 ここに事があります。私は約50種類のメッセージがあると思います。これは50件のswitch文を取得することを意味します。私はこれをより小さな部分に切り分ける適切な方法を本当に考えることができず、巨大でエラーが起こりやすい方法になります。私は何も見つけることができなかったので、これを簡単にするパターンがあるかどうか疑問に思っていました。
事前にお問い合わせいただきありがとうございます。
これは別のハンドラクラスを含む私が行ったオプションです。それぞれのメッセージを扱うロジックのビットを分離する最善の方法と思われます。 –
ネッド・フランダースが言うように、あなたは本ですべてをやっています。 –