0

ここでJavaの問題があります。現在、次のように定義されている連続定数整数である多くの定数があります。

interface Flags {
  static final short A = 0;
  static final short B = A + 1;
  static final short FIRST_USER_FLAG = B + 1;
}

あなたの多くは、私に Enum の使用を勧めています。問題は、これらのフラグが複数の場所に必要であることです。したがって、次のようになります。

interface CustomFlags {
  static final short USER_A = Flags.FIRST_USER_FLAG + 1;
  static final short USER_B = USER_A + 1;
}

ここに表示されるコードも、サーバー コードとクライアント コードに含まれる、ネットワークの両側で同じでなければなりません。それらの間のすべてのメッセージにはフラグが定義されており、このフラグによって、ネットワークはこのフラグに登録されたメッセージ オブジェクトを作成します。これは最善のアプローチではないようですが、これ以上良い方法は思いつきませんでした。問題は、ネットワーク コードに独自のフラグとメッセージがあり、基本的な認証とハンドシェイクを行うことです。そして、ネットワークを使用するコードによって定義されたメッセージ (およびそのフラグ) が必要です。

私の質問は、これをより保守しやすく読みやすくするにはどうすればよいですか? また、メッセージを送信して再作成するためのより良いアプローチを知っている人がいれば (私は TCP と UDP の両方を使用していますが、メッセージによって異なります)、それを聞いて本当に感謝しています。

説明していないことがあればお知らせください。追加します。

PS: 私はネイティブ スピーカーではないので、英語が下手で申し訳ありません。

4

2 に答える 2

1

私はそれをそのままにしておきます。これは、プロトコルの定数を定義するための非常に一般的な手法です。ピアが Java でない場合は、おそらくもう少し「デエンジニアリング」して、算術を気にせずに名前とその値を直接定義するだけです。これを簡単に変更したくない、実際には変更できないようにしたいので、不注意によるプロトコルの非互換性が忍び寄らないようにします。列挙型は、名前と型の安全性にもっと関心がある場合のためのものです。実際の値、序数などについてはあまり気にしません。

于 2012-11-18T11:52:25.993 に答える
0

列挙型はまだ答えです。具体的に値をリストしたり、列挙型をサーバーとクライアントの両方に共通のインターフェイス ドキュメントに配置したり、さまざまな領域で値が同じであることを単純に要求したりすることができます。いえ、

public enum Flags
{
  short A (0);
  short B (1);
  short FIRST_USER_FLAG (2);
  private int value;

  private Flags(int value) {
      this.value = value;
  }
}

次に、列挙型がサーバーとクライアントの両方でその基準を満たす必要があることを指定します。必要に応じて列挙型をサーバーに提供できます。

于 2012-11-18T11:40:01.057 に答える