3

あなたが大規模なバック オフィスの Enterprise Java アプリを編集していると想像してください。数年後には、他の人がこのアプリを探し回る可能性があります。つまり、コードをクリーンで理解しやすいものに保つ必要があります。パフォーマンスは最優先事項ではないかもしれません。

必要なモジュールがあります

  1. オブジェクトからデータを抽出する
  2. SE -> スウェーデンなどのマップ データ パラメータ [これは、現在のところ、このモジュールでのみ適用され、使用されます]
  3. これらの新しいパラメーターをどこかに送信します (たとえば、電子メール/xml 経由)。

小さなデータ セットの場合は、小さな HashMap を使用しますが、変換する必要があるデータのカスタム テーブルが 3 つの HashMap に成長し、一部の要素が 100 個までになりました。Translater.Javaというファイルにそれらがあります

そして、私は方法を得ました:

public String getCountryCode(String country) {
    return countryCodes.get(country);
}

で開始される

countryCodes = new HashMap<String, String>() {{
    put("Andorra", "AD");
    put("Afghanistan", "AF");
    ...
}};

それは醜く見えます!しかし、私の選択は次のようです。

  1. 新しいデータベースにデータベース テーブルを作成します。これにより、コーダーが単に何が何にマップされているかを確認したい場合に、別の難読化レイヤーが追加されます。また、このデータを変更する必要はありません。データベースはソース コードで管理されていないため、変更する場合はコードを変更することをお勧めします。(休止状態を使用します)
  2. この静的データを構成ファイルとして保存します。アプリケーションは構成オプションにデータベース テーブルを使用します。これはメンテナンスに追加されます。
  3. 構成データベース テーブルを使用してこれを格納します。これは機能しますが、構成テーブル内の他の種類のデータは比較的小さくまとまりがあるため、残りの構成オプションを見つけるのが難しくなる可能性があります。
4

2 に答える 2

0

編集:あなたの質問から、マッピングがどちらの方向に進むべきか、または両方の方法でルックアップを実行できる必要があるかどうかは完全にはわかりません。以下は、国名をキーにして国コードを値として検索することを前提としています。

私の経験では、番号 3 が最適なオプションです。多くのシステム アーキテクチャでは、ハード コーディングされたマッピングを変更する必要がある場合、アプリケーションを再デプロイする必要があります。

最初の回答に対するコメントから、マッピングは 3 年に 1 回程度しか変更されない可能性が高いことがわかりました。ただし、それを保証することはできません。要件は変化する可能性があり、国際関係も変化する可能性があります。

3番に対するあなたの留保はそれでした

それは機能しますが、構成テーブル内の他のタイプのデータは比較的小さくまとまりがあるため、残りの構成オプションを見つけるのが難しくなる可能性もあります。

この点に対する解決策は、構成データベース内のキーに対して明確に定義された明確な命名規則を用意することです。たとえば、キー名に複数レベルのプレフィックスを使用して、構成値の使用範囲/場所を絞り込むことができます。例えば:

general.translation.countrycodes.Andorra
于 2013-07-17T12:34:08.810 に答える
0

これには単に列挙型を使用してみてください。これは非常に効果的で、保守が簡単です。

例:

public enum Country {
    ANDORRA("AD"),
    AFGHANISTAN("AF"),
    ...;

    private String code;

    private Country(String code) {
        this.code = code;
    }

    public static String findCountryCode(String country) {
        return valueOf(country.toUpperCase()).getCode();
    }

    public String getCode() {
        return code;
    }
}


public class CountryTest {
    @Test
    public void testGetCode() throws Exception {
        assertThat(Country.findCountryCode("Andorra")).isEqualTo("AD");
    }
}
于 2013-04-26T19:09:37.710 に答える