2

我正试图围绕 GWTAsyncProvider<T,F>AsyncProxy<T>课程。我了解Async Provider 模式背后的概念:它允许您构建代码,以便将专有片段(模块)与AsyncProvider实现相关联。然后,只要您想使用该模块,您就可以针对该AsyncProviderimpl 提供的 API 进行编码。够简单...

但是这AsyncProxy让我失望了。根据JavaDocs:

AsyncProxy 类型用于在打算与 runAsync 一起使用的类之间提供可达性屏障,同时维护一个简单的延迟同步 API。在 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。只有一个问题,AsyncProxy只能用于只有 void 方法的类(因为您无法从尚未加载的类中获取任何内容)。

于 2012-11-17T23:20:50.547 回答