Flash AS3 RIA开发的更好实践 - 使用事件/监听器,或允许孩子在父母中调用函数?

mat*_*ler 3 apache-flex flash actionscript-3

我正在开发一个内置在Flash AS3中的Web应用程序.

在高级别 - 应用程序有一个主屏幕,并弹出几个"模态对话框"类型的屏幕来管理各种用户交互.

(这是我在我开发的大多数应用程序中使用的类似模式...)

通常 - 当用户点击对话框屏幕上的UI控件(例如,按钮,文本框,滑动条等)时 - 主屏幕需要做出反应或管理后果.

似乎有两种一般方法可以解决这个问题:

  1. 有主屏幕监听的对话框屏幕调度事件
  2. 单击这些控件时,允许对话框屏幕调用主屏幕中的功能(这要求对话框屏幕保持对主屏幕的引用,并且主屏幕中的功能是公共的)

一般来说 - 我理解第一种方法的一个主要好处是对话框屏幕没有那么紧密耦合; 它的唯一责任是播放活动.这将允许我更容易地在其他上下文或应用程序中使用对话框类.

但是对于我开发的许多RIA--一个特定的屏幕对应用程序来说是特定的,我不可能在其他应用程序中重复使用它.因此,"易于重复使用"的好处是微乎其微的.

那么 - 如果你消除了这种好处 - 哪种方法实际上更好?(性能更高,资源消耗更少?)

例如 - 如果我使用事件,那么Flash需要为可能永远不会发生的事件管理许多侦听器.因此 - 如果对话窗口可以直接调用主屏幕中的函数,而不是调度事件,则可能更有效.

哪种方法更好?每种方法还有哪些其他好处/优点/缺点?

提前谢谢了.

Jas*_*ges 5

MVC模式和许多开发人员认为通过事件解耦逻辑是一种优越的模式.

这使得代码重用成为可能,并且在生命周期方面通常更稳定,然后孩子从父母调用函数.父母添加孩子,但是孩子呼叫父母意味着两个对象必须知道并处理类型定义.无法隔离功能单元.

也许您的实现过于具体,抽象更多功能可以实现比您引用更多的重用.较大的项目可以很快达到复杂性,因为很难管理纯粹的程序模式.

计划实施应向下传递,父母保持对儿童的控制.事件泡沫向上发展.

保持控制的孩子类似于IoC(控制反转)模式,类似于Java Spring或Swiz Framework为Flash提供的内容.

函数执行速度更快; 但是,除非你说的是数千个执行模式的类,否则你所说的开销很小.在这种情况下,单例引擎可以帮助加速实施.

没有监听器的事件基本上没有开销.