0

私は GWT プロジェクトに取り組んでおり、少し混乱しています。サーバー/クライアント プロジェクトです。私はAutobeanでjsonを処理しています。Autobean が機能するには、インターフェースを使用する必要があります。私は以前にインターフェースをあまり扱ったことがなく、助けが必要です。Autobean コードは次のようになります。

interface User {
      int id();
      void setId(int id);
      String getUsername();
      void setUsername(String username);
    }

interface Result{
    List<User> getUsers();
    void setUsers(List<User> users);
}


interface Beanery extends AutoBeanFactory{
      AutoBean<User> makeBean();
      AutoBean<Result> makeBeans();
      }

json をリストに変換するには、これを行います。

AutoBean<Result> autoBeanCloneAB = AutoBeanCodex.decode(beanFactory, Result.class, "{\"users\": " + json + "}" );
List<User> users = autoBeanCloneAB.as().getUsers();

私は User クラスも持っていますが、これが不要かどうか、またはこれをどのように処理する必要があるかはわかりません。

public class User {

private int id;
private String username;


public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}


public String getUsername() {
    return username;
}

public void setUsername(String username) {
    this.username = username;
}
}

私は以前のすべてのプロジェクトで、インターフェイスではなくモデル クラスのみを使用してきました。インターフェイスの概念を読んで理解しているようですが、この場合、ユーザーインターフェイスがあるときにユーザークラスを使用する理由がわかりません。正しいアプローチは何ですか?User クラスを使用する目的はありますか? はいの場合は説明してください。

いつものように。すべての助けに感謝します

4

1 に答える 1

1

Autobean の基盤である Proxy を使用している場合は、インターフェイスが必要です。Javaプロキシと非常によく似ていますパターン。インターフェースは、具体的な実装をコンパイルする必要なく、実際には具体的な実装へのプロキシになります。GWT の以前のリビジョンでは、rpc メカニズムが使用されていましたが、サーバー側のクラスは GWT と 100% 互換性があり、コンパイルするためにシリアライズ可能でなければならないため、問題が生じていました。RequestFactory の AutoBean および GWT 実装は、コンパイル時にインターフェイスから「DTO」を作成するだけで、これを回避します。これにより、具体的な実装を gwt でコンパイルしなくても、具体的な実装で getter/setter メソッドを呼び出すことができます。json を介してサーバー側からクライアント側に状態転送を行うだけで、getter/setter メソッドがクライアント側プロキシ (生成されたインターフェイス実装) で呼び出されます。

gwt requestfactory は、多くの Autobean ボイラープレートを非表示/処理するため、調べることをお勧めします。RequestFactory を使用して Bean を作成し、ProxyUtils クラスを使用して json に変換できます (私の記憶が正しければ)。次に、単純にインターフェースを作成し、@ProxyFor(concreteImplementation.class) でアノテーションを付けます。コンパイラーは必要なコードをすべて生成するので、AutoBeanFactory インターフェースの作成などをいじる必要はありません。

お役に立てれば。

PS

もう 1 つのオプションは、jsni ネイティブ インターフェイスを使用することですが、これには独自の微妙なニュアンスがいくつかあります。

于 2015-11-30T23:06:08.063 に答える