我非常想在flex中进行远程处理。我正在使用flex 4.5并使用AMF与团队中其他人构建的Web应用程序进行交谈。他们使用Zend_AMF来序列化和反序列化数据。
我目前面临的主要问题之一是我需要与很多服务(大约60个左右)进行对话。
我从网上和adobe看到的远程处理示例,似乎我需要为EACH服务定义一个远程处理对象:
<mx:RemoteObject id="testservice" fault="testservice_faultHandler(event)" showBusyCursor="true" destination="account"/>
有这么多服务,我想我可能要定义其中的60个,我认为这些服务并不优雅。
与此同时,我一直在玩Pinta来测试AMF端点。 Pinta似乎能够允许人们定义任意数量的服务,方法和参数而没有任何这些限制。通过源代码挖掘,我发现他们实际上深入到了远程处理并且处理了许多低级别的东西。
所以,问题是,有没有办法解决这个问题,而不必定义负载或远程对象,而不必太深入并开始自己处理低级别的远程事件?
干杯
答案 0 :(得分:1)
应用程序需要许多RemoteObjects似乎很不寻常。我已经处理过非常大的应用程序,我们通常最终只有大约6-10个RemoteObject声明。
虽然您在帖子中没有提供有关RemoteObjects变体的大量细节,但我怀疑您可能会将RemoteObject
与Operation
混淆。
通常为应用程序中的每个端点声明一个RemoteObject实例。但是,该端点可以(通常会)公开许多不同的方法来调用。这些服务器端方法中的每一个都在客户端Operation
中获得结果。
如果您愿意,可以显式声明这些,但是如果您没有声明它们,RemoteObject会为您构建Operation
:
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上的单个目标,这会暴露许多方法。这种方法通常被称为APIFaçade,如果在API上使用可靠的依赖注入规则作为后盾,则可能非常有用。
另一种常见方法是按逻辑业务区域隔离API方法,例如AccountService,ShoppingCartService等。这样做的好处是可以混合使用它。匹配服务之间的协议(例如,AccountService可以通过HTTPS运行)。
如何选择拆分这些RemoteObject取决于您自己。但是,单个应用程序中的60个对我来说听起来有点怀疑。