2011-05-31 87 views
3

爲什麼在Flex中,模式背後的代碼是使用Actionscript類作爲基類,而不是使用MXML組件?
我的意思是,爲什麼我們不把我們的MXML擴展到一個新的AS3類中,而不是將我們的AS3代碼擴展到類的後面?

使用這種方法看起來更自然,因爲是真正的延伸,我們加入的代碼和功能給我們的MXML基地。
使用落後模式的代碼是一個黑客以OOP,我們每次將組件添加到我們的MXML我們需要修改我們的AS3上課時間,也就是說,如果我們修改子(MXML),我們需要修改父(AS3)太。

背後的代碼有什麼問題(「前面的代碼」?)?Flex中的背後代碼

回答

1

「代碼在前面」是一個更自然的延伸和麪向對象的設計,因爲我們是在AS3功能擴展我們的MXML和我們並不需要每次我們改變我們的孩子的時間來改變我們的父母。

但它有一個proble,我們不能在MXML因爲現在我們的MXML是我們的基類,我們有我們的var /功能在AS3子類使用綁定。


編輯:在前面代碼中的另一個問題是,你不能看到在設計模式的「AS3 componente」(在FB4沒有測試+也許它的工作現在)。更多關於這個閱讀馬克休斯的答覆。

2

這就是那種爲什麼的Adobe決定重新設計它的組件體系結構和創建的Spark組件集和根據剝皮機制。

在這個新的(-ish)理念,您創建一個擴展SkinnableComponent或者SkinnableContainer,在其中你描述你的組件的行爲的ActionScript類。然後,您可以在MXML中創建一個定義您的組件的外觀類(可能還有一些視覺行爲,但沒有該組件的基本行爲)。

這樣就可以清楚地區分顧慮。這不是與代碼隱藏的相反,但它是一種不同的方法,一旦你掌握了它就可以很好地工作。

+0

是的,但爲什麼Adobe提出代碼而不是「代碼在前面」?以及爲什麼沒有人使用這種方法(至少我沒有看到它在任何教程/指南)。我的意思是,爲什麼「前面的代碼」模式不存在?它出什麼問題了?我沒有使用代碼,我想我也不會使用「前面的代碼」,但我很好奇爲什麼沒有人提出它像解決方案(甚至比代碼更好)。 – Enrique 2011-06-01 23:21:16

+0

在我看來,無論你是在後面還是在前面編碼,無論如何這兩個類都緊密耦合。使用這兩種方法的唯一原因是將您的MXML代碼與AS代碼分開。這與分離關注無關,它只是讓你的類更具可讀性。 – RIAstar 2011-06-01 23:37:25

+0

是的,但前面的代碼是一個真正的擴展,後面的代碼不是。我們有一個純視圖類MXML和一個純粹的AS3類,它擴展了MXML,因此,這兩個類都是可用的,沒有MXML的情況下,AS3類(base)背後的代碼是沒有用的,如果你改變了你的子元素MXML)你也需要改變你的父母(AS3)!也許我沒有解釋得很好,但我認爲必須有選擇代碼的原因,而不是前面的代碼,這不是任意的,而是一種設計模式。前面的代碼必須有問題/缺點,但我看不到它。 – Enrique 2011-06-02 03:24:33

0

我認爲這是繼承自Flash時代的遺留組件體系結構,您將在黑盒子組件中拖動,並最多在皮膚顏色/形狀/字體級別上擺弄一下, t(不能)觸及它的工作原理。

2

背後流行的主要原因是工具。您無法在Flex Builder 3設計環境中拖動基於AS3的組件。我嘗試了各種解決方法,但都是有問題的。事實上,這是我這輩子的博客上講述的第一件事: http://www.rogue-development.com/blog2/2007/03/code-in-front/

在Flash Builder 4,我沒有再試過這主要是因爲,從那時起,我來實現的柔性佈局工具廢話,我很少使用它。因此,我最近的發展都是代碼先行。

如果您需要綁定到MXML中的一個變量,您可以在MXML中定義該變量,然後通過繼承您的子類。

我不是一個單皮膚組件的火花蒙皮巨大的粉絲。如果你有一個組件只有一個視覺效果,前面的代碼更容易開發。(對於需要多個皮膚的組件,皮膚是完美的)

+0

哇!感謝馬克,我現在並不孤單:)。設計視圖也是一個額外的問題,我不知道(無論如何,我還沒有在FB4中測試過)。 Bue我認爲最重要的是綁定,如果您需要在MXML中定義綁定它們的變量,那麼如果需要綁定一些,則需要將MX添加到MXML(這正是我們試圖避免的)吸氣。我認爲這兩個原因足以讓代碼存在,並且不會在前面使用代碼。如果你想在前面使用代碼,使用meadiators是一種更好的模式(我正在使用它,但我很好奇爲什麼Adobe會提出代碼)。 – Enrique 2011-06-04 16:14:18