0

「RecordStatus」と「Condition」の値のセットを検証しようとしています。以下の方法を思いつきました。

  1. 文字列 recordStatus と condition を持つクラス RecordStatusCodition を定義します。

  2. 以下のように実装されたクラス RecordStatusCoditionValidator を定義します

ArrayList validList = new ArrayList() {{

                  add(new RecordStatusCodition ("CREATED","A"));
                  add(new RecordStatusCodition ("INSERTED","B"));
                  add(new RecordStatusCodition ("INSERTED","A"));
                  }};
public boolean isProcessed(RecordStatusCodition recordStatusCodition ) {
                    return checkList.contains(recordStatusCodition);
    }
}

このクラスは、条件を確認するために他の場所のコードから呼び出されています

  if(!RecordStatusCoditionValidator.isProcessed(new RecordStatusCodition("","")))
               // do processing
        }

上記と同様に、さまざまなリストを持つさまざまな条件があり、頻繁に変更する必要がある場合があります

これは問題なく動作しますが、これは私のコードの大部分が依存するものであるため、これに対するより良いアプローチがあるかどうかを知る必要がありますか?

4

1 に答える 1

1

Mapの代わりに(HashMap実装)を使用することをお勧めしますArrayList。このようにして、オブジェクトの識別子 (この場合はAまたはB) を保持し、その状態を値として保存できます。次に、isProcessedメソッドを次のように減らすことができます

map.containsKey(key); //Where key is either "A", "B", etc.

このマップは、クラスの生のフィールドであってはなりません。生のマップではなく、アプリケーションで参照できる独自のオブジェクトにラップすることをお勧めします。これにより、さまざまな操作を制御し、それらの操作で前処理または後処理を行うことができます。

必要に応じて、クラスを列挙型にリファクタリングRecordStatusConditionして、特定のオブジェクトが持つことができる条件の範囲を定義することもできます。

RecordStatusCondition.CREATED;
RecordStatusCondition.INSERTED;

次に、次のようにオブジェクトを追加できます。

recordStatusContainer.put(record.getId(), RecordStatusCondition.CREATED);

このメソッドを使用するとかなり簡単にステータスを取得できますが、get()ツアー独自のオブジェクトをキーとして使用する場合は、再定義hascode()して機能させる必要があることに注意してくださいequals()

副次的な提案として、可能であれば、フィールドをRecordStatus追加することで現在の状態を知ることができます。RecordStatusCondition

于 2012-12-11T16:09:23.210 に答える