0

次のようなクラスがあるとします。

@ManagedBean
public class A {

@ManagedProperty("#{B}")
private B b;

private Object o;

public void operation() {
    b.methodCall(o);
}

public void setB(B b) {
    this.b = b;
}

public Object getO() {
    return o;
}

public void setO(Object o) {
    this.o = o;
}

}

これで、xhtmlからメソッド呼び出しを行うと、次のように簡単に記述できます。

<p:commandButton actionListener="#{a.operation()}" />

ただし、マネージドBeanにゲッターを追加することもできます。

public B getB() {
    return b;
}

このような同じメソッドを呼び出すと、マネージドBeanの最初のバージョンでoperation()メソッドを記述する必要がなくなります。

<p:commandButton actionListener="#{a.b.methodCall(b.o)}" />

最初のアプローチは、Javaクラスのリファクタリングでのideのサポートにより、リファクタリング中の方が簡単なように思えますが、同時に、パラメーターを伝達する手段としてのみ機能する簡単なメソッドを作成できます。

どちらがより良いアプローチですか?

4

1 に答える 1

1

この質問に対する直接的な答えはないと思います。アプローチは、私たちの要件に基づいている必要があります。どちらにも独自の長所と短所があります。

しかし、私が言えることの1つは、次のとおりです。最初のアプローチはより実現可能です。2番目のアプローチでは、 a 内に b の参照が必要なため、実際に必要でない限り必要ありません [ be が独立したエンティティである場合、AはBについて知る必要はありません]。また、 Bがビュー スコープ内にない場合は、Spring コンテナーからBのインスタンスを取得できます(アプリケーションでBのインスタンスが重複するのを回避できます)。

2 つ目の問題は、abmethod を使用する場合です。b がいつでも null にならないようにする必要があります。1 つの HTML に別のエンティティ参照がある場合、アプリケーションは密結合になります。また、html を汎用 html として使用する計画がある場合、html を他のエンティティと一緒に使用することはできません。

私の説明が明確であることを願っています。

于 2013-02-22T06:56:52.673 に答える