1

私はJavaEEに基づくWebベースのアプリケーションに取り組んでいます。

私の質問:のインスタンスを作成し、それを以下に示すようにBaseAPI呼び出されるユーティリティクラスに渡します。BaseUtil

package com ;

public class Test {
    public static void main(String args[]) {
        BaseAPI bApi = new BaseAPI();
        BaseUtil.getData(bApi);

    }

}



public class BaseUtil {

public static String getData(BaseAPI bapi) {

        bapi.addAccountIdParameter("SIM1");
        bapi.getData();
        return null;
    }
}




package com;

import java.util.HashMap;

public class BaseAPI {
    HashMap<String, Object> params = new HashMap<String, Object>();
    public void addAccountIdParameter(String value) {
        addParameter("ID", value);
    }
    public void addParameter(String name, String value) {
        if ((name != null) && (value != null)) {
            params.put(name.trim().toLowerCase(), value.trim());
        }
    }

    public String getData()
    {
        return "";
    }

}

これは正常に機能しています。これが有効なアプローチであるか、それともどこかに悪影響を与えるかどうかを教えてください。

4

2 に答える 2

2

これは完全に有効なアプローチであり、一般的には悪影響はありません。ただし、APIに最適かどうかを理解するには、かなり多くの情報が必要になります。1つの推奨事項:

BaseUtilクラスのコンストラクターをプライベートにします。

public class BaseUtil {
    private BaseUtil(){}
    ...
}

これにより、他のクラスがこのクラスのオブジェクトを作成するのを防ぐことができます(これが単なる静的ユーティリティクラスである場合)。また、このBaseUtilクラスにフィールドを追加し始める場合、アプリケーションがマルチスレッドになる場合は、スレッドセーフについて考え始める必要があります。

于 2013-02-18T14:42:55.027 に答える
1

ランタイムの観点からは、このアプローチは問題ないように見えます。これらを参照している場合、パフォーマンスやメモリの問題が発生することはありません。

より一般的な設計の観点からは、それは厄介に見えるので、そうしないことをお勧めします。BaseAPIクラス(および名前はすでにそれを示唆しています)はパブリックAPIのように見えますが、あなたの場合、インスタンスBaseAPIはパラメーターの形式で状態を格納しています。代わりに、クラスはDAOのBaseAPIように見えます。これは、ステートレスな問題で簡単に実装できます。

public class BaseAPI {
    public String getData(Map<String, Object> params)
    {
        // Do your parameter mapping here, then fetch the data
        return "";
    }
}

または、IDパラメーターをメソッドパラメーターとして指定します。

これをSpringのような依存性注入メカニズムとバンドルすると、デザインがよりクリーンになります。

于 2013-02-18T14:45:46.173 に答える