2

私は、論理表現の形式とJavaコードの間で本質的に変換するかなり複雑な変換モジュールを書いています。これは、すべて互いに分離されているいくつかのクラスにまたがっています。

私の問題は、たとえば変数名に挿入する必要のある、かなり広範なキーワードのセットを追跡する必要があることです。これらのキーワードは、モジュール内のすべてのクラスがアクセスでき、簡単に変更できる必要があります。

設計に関しては、グローバルの使用は危険信号であることを理解していますが、この場合、上記のキーワードへの静的アクセスを提供するだけのクラスを作成することは許容されますか?例えば:

public final class KeyWords {
    public static final String SELF = "self";
    public static final String RESULT = "callResult";
    // etc
}

私自身の考えでは、単純なconfigクラスのように機能するでしょう。データはかなり明確に定義されており、重要なことに、実行時に変更されないため、これは、たとえばメディエーターを使用したり、メソッド呼び出し間で他のバケットクラスを渡したりするよりもはるかに合理的です。

または、代わりにこれらすべてのキーワードをインターフェイスに配置し、すべてのクラスにこれを継承させる方がよいでしょうか?それはうまくいくかもしれませんが、それはちょうど正しく感じません。

4

2 に答える 2

4

これはこれまでで最悪のことではありませんが、やや時代遅れです。Java 1.5以降を使用している場合は、enumより良いでしょう。たとえば、型安全性を提供します。

public enum KeyWord {
    SELF("self"),
    RESULT("callResult")
    ;

    public String getKeyword() {
        return keyword;
    }

    private KeyWord(String keyword) {
        this.keyword = keyword;
    }

    private final String keyword;
}

「それらをインターフェースに押し込む」アプローチは正しくないと感じているのは正しいです。インターフェイスとは、静的なファイナルを使用するメソッドレスインターフェイスでは提供されない動作の指定に関するものです。Java 1.5以降、静的インポートを使用して、「コードの汚染」なしに同じメリットを得ることができます。

于 2013-02-08T04:11:42.733 に答える
0

互いに継承しない複数のクラスで同じキーワード セットを使用する場合は、これらのキーワードをすべて含むテキスト ファイルを読み込む静的クラスを作成することをお勧めします。

この方法を使用すると、プロが常に口にする「コードを一度使用すると、どこでも使用できる」というイデオロギーを使用できます。

-静的クラスを作成する

- すべてのキーワードが保存されたテキスト ファイルを読み込む

-キーワードを取得して比較する関数をいくつか書く

-断片化を心配することなく、必要なすべてのクラスで使用できます。

このメソッドを使用すると、簡単に更新できます。テキスト ファイルを開いて必要なものを追加または削除するだけで、それを実装するすべてのクラスで修正されるからです。

于 2013-02-08T04:23:05.730 に答える