降级Flex组件 - 最佳实践

时间:2010-07-03 08:01:22

标签: flex actionscript-3 oop

我常常遇到与Flex相同的问题:当我为spark组件创建外观或基于另一个spark组件创建新的spark组件时,我继承了我不需要的属性。例如,当我为spark.components.Panel创建自定义外观时,我不需要RectangularDropShadow。为了摆脱它,我将它从MXML代码中删除,并在AS中创建一个公共变量,其名称与删除的组件ID中的名称相同。我这样做是为了满足LOP的Liskov原则并且它有效(http://en.wikipedia.org/wiki/Liskov_substitution_principle)但是我有未使用的属性/变量,这是不好的。我不认为这是最好的方式。

当然还有另一种方法:为了创建没有不需要的继承功能的自定义面板spark.components.Panel我必须创建自己的自定义面板,例如继承自spark.components.Panel的超类。这种方法意味着一些额外的工作,但这是直接的OOP方法。

但也许还有其他一些我不知道的Flex特定技术呢?

我想知道Flex-gurus如何处理这个问题。欢迎您的所有想法和建议!

2 个答案:

答案 0 :(得分:1)

如果这是特定于为Flex组件设置外观,您可以轻松使用RectangularDropShadow类,而是扩展ProgrammaticSkin或您自己的实现IProgrammaticSkins方法的ProgrammaticSkin类。

引用:

  

当然还有另一种方法:   为了创建自定义面板   没有不需要的继承功能   spark.components.Panel我必须   创建我自己的自定义面板继承   来自超级班   例如spark.components.Panel。

至于此,我认为你太担心了。当然,做任何让你最舒服的事情,但Flex的架构设计限制之一是允许开发人员快速开发RIA而不必担心内存管理等讨厌的小事。但是,由于担心不需要的功能和浪费的资源而对您不以为然,但我认为这不是必要的,因为每次需要稍微不同的功能集时创建自己的Panel类都是浪费时间。但是,嘿,就像我的马总说的那样,“免费记忆是浪费记忆!”

答案 1 :(得分:1)

我不确定这是否是您正在寻找的,但您可以使用Exclude metadata告诉代码提示忽略样式或属性。

在Flex Framework中查找排除属性的代码然后重写getter和setter以执行任何操作并不罕见。这在元数据中:

[Exclude(name="label", kind="property")] 

这就是代码:

override public get function label():String{return null}
override public set function label(value:String):void { }

您可以使用以下方式删除样式:

[Exclude(name="RectangularDropShadow", kind="style")] 

当然,这只会影响代码提示。实现该样式的代码很可能仍在您的组件中。

你所谈论的只是继承的本质。为什么从代码中删除这些样式/属性很重要?

相关问题