2

私のレガシー コードには、属性と値のペアの概念があります。

私のシステムでは、各属性/値には任意の意味があります。したがって、私のインターフェイスにはメソッド getValue() と setValue() があります。これらはそれぞれ、私のシステムでの属性の意味に基づいて、いくつかの特定のビジネス ロジックを実行します。

これはかなりうまく機能しますが、いくつかの問題が発生しています。

1 つ目は、私のマッピングは次のようになる傾向があることです。

if (name == "name1") return thisAttributeImplementation();

これは醜く、タイピングを台無しにするのは簡単です...

2 つ目は、これらの AttributeImplementations は属性の名前を知る必要があるが、それを静的メンバーとして提供するか、コンストラクターに渡さない限り認識しないということです。どちらも醜いものです。

列挙型はこれらの問題の両方に対する良い解決策のようですが、ロジスティクスの解決に問題があります。文字列をオブジェクトに関連付けるために、列挙型はどのように見えるべきですか? 列挙型を反復処理して適切なものを見つけるにはどうすればよいですか? オブジェクト自体は、関連付けられている文字列の知識をどのように取得する必要がありますか?

4

1 に答える 1

2

これに似たものは正しいですか?

public enum Borough {
    MANHATTAN(1),
    THE_BRONX(2),
    BROOKLYN(3),
    QUEENS(4),
    STATEN_ISLAND(5);

    private int code;

    private Borough(final int aCode) {
        code = aCode;
    }

    /**
     * Returns the borough associated with the code, or else null if the code is not that of a valid borough, e.g., 0.
     * 
     * @param aCode
     * @return
     */
    public static Borough findByCode(final int aCode) {
        for (final Borough borough : values()) {
            if (borough.code == aCode) {
                return borough;
            }
        }
        return null;
    }

    /**
     * Returns the borough associated with the string, or else null if the string is not that of a valid borough, e.g., "Westchester".
     * 
     * @param sBorough
     * @return
     */
    public static Borough findByName(final String sBorough) {

        for (final Borough borough : values()) {
            if (borough.name().equals(sBorough)) {
                return borough;
            }
        }
        return null;
    }

    public int fromEnumToInt() {
       return mId;
}


}
于 2012-11-13T20:27:59.880 に答える