2010-05-09 228 views
1

我希望能夠理解如何開發Flex應用程序,以便我可以在運行時提供實現類。在Java世界中,我會在JAR中指定接口(例如myapp-api.jar),在單獨的JAR中實現(例如myapp-impl.jar),並將其與應用程序WAR中的其他資源(例如myapp)一起打包。戰爭)。在應用程序的代碼中,我會動態地實例化實現類。開發模塊化Flex應用程序

這種方法在Flex中可行嗎?我知道我可以動態地實例化類,所以這是一個好的開始。不過,我對模塊,RSL和SWC有點困惑。

我曾希望創建一個引用了接口SWC和實現SWC的SWF應用程序。這個想法是,如果我需要調整特定客戶的應用程序,那麼我可以創建一個新的實現SWC,而不必修改SWF或接口SWC。

任何想法?

回答

2

這在flash/flex中比在java中有點難,或者如果你來自Java背景,至少它會更隱晦)。我有幾個指針給你。

如果您真的想在運行時擁有單獨的類庫,並且特別是如果您認爲此庫將用於跨同一組人將要使用的多個項目,則只需使用RSL。 (它們主要是爲了減少下載/啓動時間)

您也可以自己將應用程序分成幾個部分 - 在這種情況下,您需要確保不會將相同的信息打包兩次 - 這可以完成通過在第一次編譯的swf上生成linkreport並從第二次編譯中排除這些類。這是modules如何在flex中工作。

SWCs主要用作編譯時庫(它們基本上是一個包含swf和描述其內容的元數據xml文件的zip)。

如果你想在一個庫中有一個獨立的接口集合,你可以使用這個接口生成一個swc,並且用這個實現編譯另一個swc,你應該在編譯實現類時排除接口,如果你想避免重複類/接口定義。如果在鏈接接口和實現SWC時編譯最終應用程序而不排除類,則可以使用單個最終SWF來運行應用程序 - 如果要真正將它分開,則應該查看模塊(或簡單加載swf if你正在創建一個純動作項目)。

我的確如上所述使用了SWC,現在正在爲我們的curren項目尋找RSL和模塊。

+0

感謝您的回覆西蒙。我設法使用compc/ant來編譯接口SWC和實現SWC(減號接口)。我想下一步是將接口SWC編譯到應用程序中,然後在運行時以某種方式加載實現SWC。如果可能的話,我真的想避免重新編譯主應用程序。 理想情況下,我想將一個參數傳遞給SWF,以指示在運行時加載哪個SWC實現。我認爲只有SWF可以加載,所以我需要弄清楚如何解決這個問題 - 例如我可以將SWC轉換爲SWF還是從SWC中提取SWF並使用它? – ukdavo 2010-05-10 10:55:22

+1

您可以通過解壓縮swc來從swc中獲取swf。您可以使用Loader類加載swf - 如果您希望代碼共享相同的上下文,您可能必須將加載程序的ApplicationDomain設置爲與應用程序的其餘部分相同的域(我不確定這是否爲默認或不)。 – 2010-05-10 15:43:04