1

私にはアイデアがあり、それは次のようになります。

  1. サービス側でファイルを解析します。
  2. ファイルの内容に基づいてアクションのリストを作成します。
  3. アクションのリストをクライアント側に渡します。
  4. クライアントに、リストの項目に基づいてアクションを定義して実行してもらいます。

ビジター パターンと同様に、アクション用のクラスがあり、それらはすべて Action インターフェイスを継承します。次に、クライアントは訪問者を実装します。Java では、次のようになります。

public interface Action {
    void act(Visitor visitor);
}

public class PerfectAction implements Action {
    void act(Visitor visitor) {
         visitor.bePerfect();
    }
}

public class VisibleAction implements Action {
    void act(Visitor visitor) {
         visitor.beVisible();
    }
}

public interface Visitor {
    void bePerfect();
    void beVisible();
}

問題
Action および Visitor インターフェースの Proxy クラスを作成できません。セッターやゲッターは含まれません。さらに、データは含まれていません。Visitor オブジェクトでどのメソッドを呼び出す必要があるかというこの知識を、サービスからクライアント側に渡すことは可能ですか?

4

2 に答える 2

1

リクエスト ファクトリは、データの移動(EntityProxyおよび/またはValueProxy) のみを行い、クライアントに代わってサーバーに処理を依頼できます ( RequestContext)。

アクションを転送するには、まずクライアントとサーバーが実行可能なアクションの知識を共有する必要があります。

次に、2 つの解決策があります。

  • GWT-RPC に移行
  • とにかく、クライアントはすべての可能なアクションを前もって知る必要があるため、列挙型などを作成して各アクションを識別し、それらの識別子をクライアントに転送します。クライアントはそれらを実行する具体的なアクションにマップします。
于 2012-09-06T11:10:03.563 に答える
0

これが訪問者パターンを実装する方法だとは思いません。私はこのようなことをします

public interface ActionVisitor {
  void visit(VisibleAction va);
  void visit(PerfrectAction pa);
}

public class PerfectAction implements Action {
    void act(Visitor visitor) {
       visitor.visit(this);
    }
}

public class VisibleAction implements Action {
    void act(Visitor visitor) {
        visitor.visit(this);
    }
}

次に、適切なアクションを実行する訪問者の実装を定義します。

ビジターが行うことのロジックがクラスの外部になるように、このように定義することが重要です。これ以前は、実装ごとにビジターの実装が異なっていたため、動作を変更するのは困難でした。

何をすべきかのロジックが訪問者に外部化されているため、これで問題が解決すると思います。

于 2012-09-06T09:24:35.873 に答える