AS3:如果调用远程服务,如何组织代码

时间:2009-11-04 07:57:23

标签: flex actionscript-3 oop application-design

在我的flex应用程序中,我经常使用服务。我需要它们来更新应用程序中的数据,因此请经常调用它们。目前我通过以下方式实现它:

1)有一个服务提供商(AMFLoader类) 2)和响应处理程序(Responder类)

代码如下所示:

public function AMFLoader(url:String):void
{
     gateway = new NetConnection();
     gateway.connect(url);
}

public function callAMFLoader(serviceName:String, param:String,  resultHandler:AMFResultHandler):void
{
     gateway.addEventListener(IOErrorEvent.IO_ERROR, resultHandler.onIENetError);
     gateway.addEventListener(NetStatusEvent.NET_STATUS, resultHandler.onNetStatus);
     responder = new Responder(resultHandler.onSuccess, resultHandler.onFalse);
     gateway.call(serviceName,responder, param);

}

和结果处理程序类:

public class AMFResultHandler
{
    public function AMFResultHandler()
    {
    }


    public function onSuccess(result:*):void
    {
        trace("Result from basic AMF Result handler on success: " + result);
    }

为了调用服务,我扩展了基本的Result处理程序类,并使自定义函数处理结果。通常在最新阶段,我将从服务接收的数据绑定到我在主应用程序中定义的全局变量,然后在其他类中使用它。

目前我注意到使用全局变量这是一件非常讨厌的事情,不确定它是否是一个很好的编程风格。 例如,当我试图重构我的代码时,我注意到有时很难理解谁和何时(以及为什么)在那里填充数据。

也许您可以建议一种存储服务调用数据的方法。我无法理解的主要问题是我们不能只创建一个方法,例如getData,并在应用程序的某个地方调用它,因为调用服务和存储数据是不同的事情(因为只在某些事件上接收数据)....

提前致谢。

3 个答案:

答案 0 :(得分:1)

有几个Flex框架可以帮助您:

这些框架中的每一个都将帮助您更好地组织模型和服务。看看他们每个人,选择一个你感到舒服的。

答案 1 :(得分:1)

您所询问的是MVC框架的主要目的之一。特别是你在谈论模型或数据接口。如果你不想使用完整的框架,你应该做的是创建2个类。

1)DataObject

2)DataModel

其中“数据”被替换为直观的用户或产品。在DataObject中,您只保留数据的属性,同样,它是唯一假定数据正确的位置。 DataObject虽然只能通过DataModel直接访问。在数据模型中,您可以保留DataObject的所有getter和setter,以及填充DataObject所需的任何远程服务调用。

这只是MVC风格应用程序开发的开始,如果您真的想要转向更灵活,可管理的代码,您应该考虑使用完整的框架。我建议的两个是:

1)Swiz(http://swizframework.org/):一个超级简单的事件驱动框架,真正利用了flex的力量。

2)PureMVC(http://puremvc.org/):一种易于理解的MVC代码结构,强调代码解耦和严格的MVC架构。

我说从这两个中的一个开始,你将成为一个更好的灵活开发人员。


一些很棒的教程:

swiz:http://vimeo.com/7166397

pureMVC:http://active.tutsplus.com/tutorials/workflow/understanding-the-puremvc-open-source-framework/

答案 2 :(得分:0)

我个人也喜欢Mate。我正在挖掘他们的框架,并且正在为我目前正在进行的一些项目进行改造。