我常常遇到与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如何处理这个问题。欢迎您的所有想法和建议!
答案 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")]
当然,这只会影响代码提示。实现该样式的代码很可能仍在您的组件中。
你所谈论的只是继承的本质。为什么从代码中删除这些样式/属性很重要?