我正在开发一个内置于 Flash AS3 中的网络应用程序。
在高层次上 - 应用程序有一个主屏幕和几个“模态对话框”类型的屏幕,这些屏幕会弹出以管理各种用户交互。
(这是我在开发的大多数应用程序中使用的类似模式...)
通常 - 当用户单击对话框屏幕上的 UI 控件(例如,按钮、文本框、 slider 等)时 - 主屏幕需要使用react或管理后果。
似乎有两种通用的方法来处理这个问题:
- 让对话框屏幕调度主屏幕监听的事件
- 当点击这些控件时,允许对话框屏幕调用主屏幕中的函数(这要求对话框屏幕保持对主屏幕的引用,并且主屏幕中的函数是公共(public)的)
总的来说 - 我知道第一种方法的主要好处之一是对话屏幕不是那么紧密耦合;它的唯一职责是广播事件。这将使我能够更轻松地在其他上下文或应用程序中使用对话框类。
但是对于我开发的许多 RIA - 一个特定的屏幕对于应用程序来说是SO SPECIFIC,我不可能在另一个应用程序中重用它。因此,“易于重复使用”的好处是微乎其微的。
那么 - 如果你消除了这种好处 - 哪种方法实际上更好? (性能更高,资源消耗更少?)
例如 - 如果我使用事件,那么 Flash 需要为可能永远不会发生的事件管理许多监听器。所以 - 如果对话窗口可以直接调用主屏幕中的函数,而不是调度事件,可能会更有效。
哪种方法更好?每种方法还有哪些其他好处/优点/缺点?
非常感谢。
最佳答案
MVC 模式和许多开发人员认为通过事件解耦逻辑是一种优越的模式。
这可以实现代码重用,并且在生命周期方面通常比子级从父级调用函数更稳定。 parent 添加 child ,但 child 调用 parent 意味着两个对象都必须知道并处理类型定义。没有办法隔离功能单元。
也许你的实现太具体了,抽象更多的功能会比你引用的更多重用。较大的项目会很快达到复杂性,从而难以管理纯程序模式。
程序化实现应该向下传递, parent 保持对 child 的控制。事件向上冒泡。
child 维护控制类似于 IoC(控制反转)模式,类似于 Java Spring 或 Swiz 框架为 Flash 提供的内容。
函数将执行得更快;但是,除非您说的是数千个执行模式的类,否则您所说的开销是最小的。在这种情况下,单例引擎可以帮助加快实现速度。
没有监听器的事件基本上没有开销。
关于flash - Flash AS3 RIA 开发的更好实践 - 使用事件/监听器,还是允许子级调用父级中的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7837188/