我第一次在 Actionscript 3.0 中使用自定义事件,我不确定如何最好地设计它们。我需要几个事件。其中一些需要传输不同类型的数据,而另一些则不需要。现在我不知道是应该使用一个类来实现它们,还是应该为不同的目的使用单独的类。为每种数据创建一个自己的事件类对我来说似乎有点混乱,因为这些事件基本上都会做同样的事情。但我也不太喜欢单一课程的选择。这个类需要一个通用变量来存储任何类型的数据,这些数据也将被多次使用。此外,我必须对我想从中访问的所有数据进行类型转换。如果有时要运输多个物体怎么办?哪一个是要走的路(风格明智)还是我没有想到的另一种方式?
4 回答
我认为这取决于上下文。Cairngorm 的一般最佳实践是严格限制新事件的目的。我经常看到事件类型到事件类到命令的一对一映射。如果不是明确的,这不算什么。
另一方面,FlexEvent 有多种不同的用途,这(从技术上讲)是一个自定义事件。这在其上下文中具有完美的意义——它通常与 DisplayObject 的渲染事件并行运行......
如果您只是在谈论一个新的事件类型(并且不需要携带额外的数据),请不要重新发明轮子——事件将类型作为参数。将新类型存储在一些公共静态常量中,然后使用它。
如果您确实需要携带数据,我的一般建议是尽可能地出错或强类型变量的一侧,这样您将受益于编译时错误。如果这可以变得更通用(例如,IList 而不是 ArrayCollection),那就更好了,但是,除此之外,您使代码更容易的越明确。
我怀疑找到正确的平衡会变成走钢丝,其中很多是个人喜好,但我一直认为举办更多活动比举办更少活动更好,原因如下:
1) 代码优化——如果你只需要发送一个字符串,不要在对象中传递它——这会产生比你需要的更多的复杂性。同样,如果您的数据负载必须庞大且复杂,那么单个对象可能还不够。我认为,根据您的数据有效负载创建不同的事件类型是最低限度的。
2) 代码可读性——是的,它在具有十亿个事件的 Cairngorm 中变得复杂,但你知道吗?我总是确切地知道事件是做什么的,而且从来没有任何关于它来自哪里的问题。如果您正在处理一个足够大的项目,A)其他人会阅读您的代码或 B)随着时间的推移您可能会忘记每个事件的作用,那么我绝对建议将所有事件分解为自定义类。
希望有帮助!
我想使用一个自定义事件类就足够了。
public class CustomEvent extends Event {
public var data:Object;
public function CustomEvent(type:String, cData:Object) {
super(type, true);
this.data = cData;
return;
}
}
并且在通过数据对象分发任何自定义事件时传递数据。dispatchEvent(new CustomEvent("eventWithData", {somedata:value, somemoredata:value}));
与大多数其他代码一样,这实际上取决于理解发生的事情的难易程度。如果使用一个类更容易,请使用一个,如果使用更多特定于用例的类更容易,请使用更多。
Actionscript 明智的做法是,只使用一个类可以节省几个字节,但编程最佳实践始终是最适合代码重用和最容易理解代码的方法。
您还可以根据需要在自定义事件上放置任意数量的特定于类型的公共属性,并且只分配或检索您需要的公共属性,而不是拥有一个通用数据属性。