2

私はGWTAsyncProvider<T,F>AsyncProxy<T>クラスに頭を悩ませようとしています。Async Provider パターンの背後にある概念を理解しています。これにより、排他的なフラグメント (モジュール) がAsyncProvider実装に関連付けられるようにコードを構造化できます。次に、そのモジュールを操作したいときはいつでも、その実装によって提供される API に対してコーディングしますAsyncProvider。簡単に...

しかし、それAsyncProxyは私を怒らせます。JavaDocs によると:

AsyncProxy 型は、単純な遅延同期 API を維持しながら、runAsync で使用することを目的としたクラス間に到達可能性の障壁を提供するために使用されます。AsyncProxy でインスタンス メソッドを最初に呼び出すと、runAsync を介して具体的なオブジェクトのインスタンス化がトリガーされます。

しかし、これはAsyncProviderがすでに行うべきことではありませんか?!? AsyncProxyの代わりにどのような場合に使用するかについて、誰かが具体的な例を教えてくれれば、AsyncProvider物事はまとまり、JavaDocs の残りの部分を理解できると思います。

4

1 に答える 1

2

AsyncProxyコード分​​割を使用する別の方法です。たとえば、基本的には構文糖衣であり、代わりに使用できますGWT.runAsync

分析で複雑なポップアップを表示できるクラスがあるとします。

public class InformationResolver {

    public void showAnalytics(String targetId){
        //lots of complicated logic here
    }         

}

このクラスによって提供される機能は、ユーザーが最初に使用したいものではないことがわかっています。したがって、コード分割の最適な候補です。そして、それは void メソッドしか持っていないので、 で実現するのは本当に簡単AsyncProxyです。

まず、インターフェースを抽出します。

  interface InformationResolverIfc{ void showAnalytics(String targetId);}

元のクラスは、このインターフェイスを実装します。プロキシ インターフェイスを作成するよりも:

@ConcreteType(InformationResolver.class)
 interface ResolverProxy extends AsyncProxy<InformationResolverIfc>, InformationResolverIfc {}

さて、ある時点でshowAnalyticsメソッドを呼び出したい場合は、次のようにします。

InfomationResolverIfc resolver=GWT.create(ResolverProxy.class);
resolver.showAnalytics("gwt");

ここにあるのは、 によって提供される機能をアプリケーションの任意の場所で自由かつ簡単に使用できるということですがInformationResolver、このクラスの実装コードは、実際に初めて使用するときにのみダウンロードされます。そして、あなたはまったく使う必要はありませんGWT.runAsync。1 つだけ問題があります。これは、AsyncProxyvoid メソッドのみを持つクラスにのみ使用できます (まだロードされていないクラスからは何も取得できないため)。

于 2012-11-17T23:20:50.547 に答える