6

私はこのようなことをするJavaクラスを持っています

public class MyObjectUtil {

    private final MyObject myObject;

    public MyObjectUtil (MyObject myObject){            
        this.myObject = myObject;    
    }

    public boolean isSomeInfoPresentValid() {
        return myObject.isSomething();
    }

    public void modifyMyObjectInSomeWay(String blah) {
        myObject.modify(blah);
    }

}

ユーティリティ クラスをインスタンス化して MyObject の特定のインスタンスとやり取りする必要があるたびに。

myObject は Session obj として存在します

MyObjectUtil myObjUtil = new MyObjectUtil(myObject);
myObjUtil.modifyMyObjectInSomeWay("blah");
boolean valid = myObjUtil.isSomeInfoPresentValid();

同じ結果を得るには、毎回 myObject をメソッド パラメーターとして使用して同じ操作を行う静的関数を使用できます。

public class MyObjectUtil {

    public static boolean isSomeInfoPresentValid(MyObject myObject) {
        return myObject.isSomething();
    }

    public static void modifyMyObjectInSomeWay(MyObject myObject, String blah) {
        myObject.modify(blah);
    }

}

どの道を行けばいいのかわからない。
私はコントローラーで Util クラスを使用していますが、同じ myObject インスタンスに対していくつかのメソッドを呼び出す必要がある場合があるため、最初のソリューションがより正しいように思えます。このように、コントローラーに対して多くの要求を行うと同時に、myObject が特定の http 要求に関連しているため、毎回多くの MyObjectUtil インスタンスを作成することになります。

私の場合はどちらの道を進み、他の場合はどのように選択すればよいですか?

MyObject は、MyObjectXXXUtil MyObjectYYYUtil などの一部のユーティリティ クラスによって特定の方法で使用されます。これらの Util メソッド (myObject を変更し、特定のステータスをチェックする) を特定の MyObject 実装から除外したいと思います。これらは固有のものではないためです。多くの Util 関数は、特定の方法で MyObject とやり取りできます。

4

2 に答える 2

7

MyObjectUtil のメソッドが MyObject に完全に依存している場合は、それらを MyObject に配置します。ユーティリティ クラスは、メソッドを使用できるクラスが多数ある場合に便利です。

于 2010-12-13T11:52:27.533 に答える
2

以前にこれについて議論した他のいくつかのスレッドを次に示します。

Java ユーティリティ クラスとサービス

Java 抽象クラスまたは静的ユーティリティ クラスの設計の選択

私にとって、それはすべて状態に依存します。ユーティリティ クラスが状態を必要としない場合は、静的な方法論を使用します。

また、説明したメソッドは、そのドメイン オブジェクトで実行する有効なアクションとして、オブジェクト自体に存在する可能性があります。

于 2010-12-13T11:54:12.850 に答える