0

我对 flex 中的远程处理非常陌生。我正在使用 flex 4.5 并与团队中其他人使用 AMF 构建的 Web 应用程序交谈。他们使用 Zend_AMF 对数据进行序列化和反序列化。

我目前面临的主要问题之一是我需要与很多服务(大约 60 个左右)交谈。

从我在网上和 adobe 看到的远程处理示例中,似乎我需要为每个服务定义一个远程处理对象:

<mx:RemoteObject id="testservice" fault="testservice_faultHandler(event)" showBusyCursor="true" destination="account"/>

有这么多服务,我想我可能需要定义其中的大约 60 个,我认为这不是很优雅。

同时,我一直在使用 Pinta 来测试 AMF 端点。Pinta 似乎能够允许人们定义任意数量的服务、方法和参数,而没有任何这些限制。挖掘源代码,我发现他们实际上已经深入到远程处理并且正在处理很多低级别的东西。

所以,问题是,有没有一种方法可以解决这个问题,而不必定义负载或远程对象,也不必深入研究并开始自己处理低级别的远程事件?

干杯

4

1 回答 1

1

应用程序需要这么多 RemoteObject 似乎是不寻常的。我处理过非常大的应用程序,通常我们最终得到的 RemoteObject 声明不超过 6-10 个。

尽管您在帖子中没有详细说明 RemoteObjects 的变体,但我怀疑您可能RemoteObject会对Operation.

您通常为应用程序中的每个端点声明一个 RemoteObject 实例。但是,该端点可以(并且通常确实)公开许多要调用的不同方法。这些服务器端方法中的每一个都在客户端获取结果Operation

如果您愿意,您可以显式声明它们,但是Operation如果您不声明它们,RemoteObject 会为您构建:

 var remoteObject:RemoteObject;
 // creates an operation for the saveAccount RPC call, and invokes it, 
 // returning the AsyncToken
 var token:AsyncToken = remoteObject.saveAccount(account); 
 token.addResponder(this); 
  //... etc

如果您与单个服务器层进行交互,您通常可以使用单个 RemoteObject,指向 API 上的单个目标,这会公开许多方法。这种方法通常被称为 API Façade,如果有可靠的 API 依赖注入规则作为后盾,它会非常有用。

另一种常见的方法是按逻辑业务区域隔离 API 方法,例如 AccountService、ShoppingCartService 等。这具有能够在服务之间混合和匹配协议的好处(例如,AccountService 可以通过 HTTPS 运行)。

如何选择拆分这些 RemoteObject 取决于您。但是,一个应用程序中的 60 个对我来说听起来有点可疑。

于 2011-10-18T11:57:07.433 回答