1

解決する正しい方法は何ですか:

Class A {

methodDoSomeOperation() {

  ClassB b.someOperation(.....);
....

 }


ClassB {

someOperation(....) {


 if (this.someCondition) then{
   ClassC c.anotherOperation(....)
  } else {
 ClassD d....
 }
}

 }

メソッドc.anotherOperationには長い時間がかかります。選択された内容に関する通知を受け取りたい:c.anotherOperation(....)またはd.....、 を呼び出す前にユーザー インターフェイスに表示するc.anotherOperation

何かのようなもの:

someOperation(....) {


if (this.someCondition) then{
 //notify ClassA what was selected and continue
 ClassC c.anotherOperation(....)
 } else {
 ClassD d....
 }
}

明らかに、何らかのメソッドを呼び出すことは可能ですClassAが、これは強力な結合と混乱を招くロジックを作成します。Springのいくつかの機能を使用することは可能ですか?

4

3 に答える 3

2

Decorator Patternをお探しですか?これは、各クラスがその部分を追加/集約した場合に適用されます。

それとも責任の連鎖?各クラスはオプションで処理を行うため、これはより適切な場合があります。クラス A、B、および C が処理オブジェクトであると仮定すると、どのような種類の操作を行うかを定義するロジックがあり、オプションで特定の処理を実行してから、次の処理オブジェクトに渡します。A、B、C を連鎖させてそれぞれの役割を果たしているように見えることを考えると、これはあなたの説明に最もよく当てはまるようです。次に、どの処理オブジェクトがその役割を果たしたかを示すために、コンテキストを定義してチェーンに沿って渡すことができ、各オブジェクトがその役割を果たします。

于 2012-05-18T14:00:01.730 に答える
1

Observer パターンの何らかの形を検討していただけますか? UI に近いクラス (クラス A でしょうか?) は、オブザーバーとしてクラス B に登録できます。次に、チェック B.someCondition を実行すると、登録されたオブザーバーを呼び出して、C で長時間実行される操作を呼び出すことができます。

于 2012-05-18T14:25:07.210 に答える
1

ユーザーが c.anotherOperation() を開始する前にキャンセルできるようにしますか? もしそうなら、 someOperation() は実際にはそれを呼び出しません。代わりに、OK/キャンセル ダイアログが表示され、OK の選択は UI によって c.anotherOperation() につながるコマンドとして扱われます。(おそらく、ClassA と ClassB を介して、それぞれの責任に依存します。)

于 2012-05-18T15:15:27.700 に答える