2010-07-03 38 views
0

我經常遇到與Flex相同的問題:當我爲Spark組件創建外觀或基於另一個Spark組件創建新的Spark組件時,我繼承了不需要的屬性。例如,當我爲spark.components.Panel創建自定義外觀時,我不需要RectangularDropShadow。在擺脫它的那一刻,我將它從MXML代碼中移除,並在同名類型的AS中創建一個公共變量,它的名稱與它在刪除的組件ID中的名稱相同。我這樣做是爲了滿足面向對象的Liskov原理並且它可以工作(http://en.wikipedia.org/wiki/Liskov_substitution_principle),但是我有沒有使用過的屬性/變量並不好。我不認爲這是最好的辦法。降級Flex組件 - 最佳實踐

當然還有另一種方法:爲了創建沒有不需要的繼承特性的自定義面板spark.components.Panel我必須創建自己的自定義面板,例如繼承自spark.components.Panel的超類。這種方法意味着一些額外的工作,但這是直接的面向對象方法。

但也許還有其他Flex我不知道的特定技術?

我想知道Flex-gurus如何處理這個問題。你的想法和建議是歡迎!

回答

1

我不確定這是不是您要找的內容,但您可以使用Exclude metadata來告訴代碼提示忽略樣式或屬性。

在Flex框架中尋找排除屬性然後重寫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")] 

當然,這只是影響了代碼提示。實現該樣式的代碼很可能仍然在您的組件中。

你在說什麼只是繼承的本質。爲什麼從代碼中刪除這些樣式/屬性很重要?

+0

我只想發表相同的答案(我昨天來到它)。如果我覆蓋你所顯示的功能 - 那麼沒有必要使用未使用的屬性。謝謝! – Worker 2010-07-04 10:02:09

1

那麼,如果這是特定於蒙皮Flex組件,您可以輕鬆地使用RectangularDropShadow類,而不是使用RectangularDropShadow類,而不是擴展ProgrammaticSkin或您自己的實現IProgrammaticSkins方法的ProgrammaticSkin類。

報價:

當然還有另一種方法: 爲了不不必要的繼承功能來創建自定義面板 spark.components.Panel我必須 創建自己的自定義面板繼承 從超例如,類別爲 spark.components.Panel。

至於這個,我想你太擔心了。做任何讓你感覺最舒服的事情,但是Flex的架構設計限制之一是允許開發人員快速地開發RIA,而不必擔心內存管理等煩人的小事情。然而,由於您擔心不必要的功能和資源浪費,但我不認爲這是必要的,因爲每次您需要稍微不同的功能集時,創建自己的Panel類都是浪費時間。但是,嘿,這就像我的馬總說的,「自由的記憶是浪費的記憶!」