我第一次在Actionscript 3.0中使用自定义事件,我不确定如何最好地设计它们。我需要一些事件。其中一些需要传输不同类型的数据,而另一些则不需要。现在我不知道是否应该使用单个类来实现它们,或者为不同的目的使用单独的类。 为每种数据创建一个自己的事件类对我来说似乎有些混乱,因为这些事件基本上都会做同样的事情。但我真的不喜欢单一类的选项。这个类需要一个通用变量来存储任何类型的数据,这些数据在很多时候也会被闲置。此外,我将不得不对我想要从中访问的所有数据进行类型转换。如果有时候有多个物体需要运输怎么办? 哪一个是前进的方式(风格明智)还是有另一种我没想过的方式?
答案 0 :(得分:1)
我认为这取决于具体情况。 Cairngorm的一般最佳实践是严格限制新事件的目的。我经常看到事件类型到事件类到命令的一对一映射。如果不明确,这没什么。
另一方面,FlexEvent具有各种不同的用途,并且(技术上)是一个自定义事件。这在其上下文中完美呈现 - 它通常与DisplayObject的呈现事件并行运行...
如果您只是在讨论新事件TYPE(并且不需要携带额外数据),请不要重新发明轮子 - 事件将类型作为参数。将新类型存储在某个公共静态常量中,然后使用它。
如果您确实需要携带数据,我的一般建议是尽可能错误地使用强类型变量,这样您就可以获得编译时错误。如果这可以更通用(例如,IList而不是ArrayCollection),那就更好了,但是,除此之外,您越容易使代码更容易。
答案 1 :(得分:1)
我怀疑找到合适的平衡会变成走钢丝的走路,其中很多都是个人偏好,但我总是觉得,由于以下几个原因,举办更多活动比举办活动更好:
1)代码优化 - 如果您只需要发送一个字符串,请不要在对象中传递它 - 这会产生比您需要的更多复杂性。同样,如果您的数据有效负载必须庞大且复杂,则单个对象可能还不够。我认为,基于您的数据有效负载创建不同的事件类型是最低限度的。
2)代码可读性 - 是的,它在像Cairngorm这样的十亿事件中变得复杂,但你知道吗?我总是清楚地知道什么是事件,并且从来没有任何关于它来自何处的问题。如果你正在做一个足够大的项目,A)其他人会读你的代码或B)你可能会随着时间的推移忘记每个事件的作用,那么我肯定会建议将所有事件分解为自定义类。
希望有所帮助!
答案 2 :(得分:0)
我想使用一个自定义事件类就足够了。
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}));
答案 3 :(得分:0)
与大多数其他代码一样,它真的很容易理解最新情况。如果使用一个类更容易,使用一个,如果更容易使用更多特定于用例的类,则使用更多。
Actionscript明智地说,你只需要节省几个字节,但是编程最佳实践总是最适合代码重用,最容易理解代码。
您还可以根据需要在自定义事件中放置尽可能多的类型特定公共属性,并且只从您需要的属性中分配或检索,而不是拥有一个通用数据属性。