我目前的應用程序有一個DataMgr類,其中我把所有與數據相關的一切。這個班最近變得太大了,我想將它分成更小的部分以便於維護。設計模式問題
這是我的想法:
創建將有將在應用隨處訪問的所有變量的AbstractDataMgr類。例如,將包含所有用戶的usersList ArrayCollection。
所有較小的DataMgr將擴展AbstractDataMgr。例如,擴展AbstractDataMgr的UsersDataMgr類。這樣,UsersDataMgr就可以加載並填充AbstractDataMgr中的usersList。另一個例子是SessionDataMgr類,它關心在我的應用程序中發生的一些播放會話。
我的問題是:
我在正確的軌道上?
我想把每個較小的DataMgr類放在一個單獨的模塊中,以加快編譯時間。這樣,當我編譯SessionsModule時,它不會查看UsersModule,因此編譯時間更少。
這是我的問題對我發起的主題爲:當內部SessionsModule,如何(例如,通過調用函數getUserData),而不必在SessionsDataMgr進口UsersDataMgr得到的UsersDataMgr用戶的信息。因爲如果我導入它,那麼它將被編譯在SessionsDataMgr中......我不想要。
我希望我不會混淆你,希望我能找到一些幫助。
更新1:
因此,根本的問題是,我有我來之前竟被設計了大量的應用。現在我正在努力讓事情變得更好,更容易。
目前,編譯完整的應用程序需要很長時間(大約3-3:30分鐘)。這是由於多個問題: 1-框架中的文件太多,每次編譯應用程序時都需要檢查更改。 2-其中一些文件包含大量數據(例如,其中一個信息表被硬編碼爲大小爲7.5MB的文件中的大型數組)。
所以目前需要很長時間才能修復bug,那是因爲編譯時間太長。所以我試圖通過將應用程序分解成模塊來解決這個問題。在創建了三個模塊後,我發現每個模塊的編譯時間也需要很長時間(大約2分鐘)...
除了這個問題,現在不是一個大型的swf,我有3個其他的swfs與大尺寸。所以我決定從這些模塊中刪除完整的框架,並且只包含所需的文件。在我包含DataMgr之前,一切都看起來不錯......之後,我必須包含所有的框架才能編譯而沒有bug。這是因爲DataMgr在其中導入了很多框架。
所以我解決這個問題的第二步就是分割DataMgr。我喜歡你的建議,這就是我打算做的事情......但是,我仍然有一個沒有答案的問題:
我的意圖是有模塊和分開DataMgr是我不想包含完整框架在每個模塊中。相反,只有所需的文件。但是,如果在SessionsDataMgr模塊中,我會調用:
UsersDataMgr.getInstance()。getUserInfo(userId);
這意味着我必須在SessionsDataMgr中導入UsersDataMgr ...這也意味着(如果我理解這一點),編譯UsersDataMgr時,編譯器將檢查SessionsModule的所有文件,但也將檢查所有SessionsDataMgr中的文件。這會增加swf的文件大小,並會增加編譯時間。
- 我的理解是如何正確工作的?
- 有沒有解決這個問題能夠完全分離兩個模塊,但在某些時候能夠從其他模塊的用戶功能?
對不起,很長的答覆,並感謝您的幫助。
好的。我更清楚地理解你的問題範圍。您需要儘可能地分離代碼以避免大量的編譯時間依賴性和整體複雜性。你正在尋找的答案是反思。反射將允許您在運行時添加/刪除模塊而無需重新編譯,並避免在編譯時進行檢查。我現在有點忙,但稍後我會再寫一些。 – 2011-03-14 15:14:49
謝謝。這是我第一次瞭解「反思」。我在網上搜索它,並獲得了一些有關.net世界中反思的資源。但是,我找不到任何有關如何在Flex 4中使用Reflection的資源。如果您有任何資源可以幫助我學習和實現Reflection模式,請發佈它們。無論如何,等待你的進一步解釋。 – 2011-03-17 17:49:54
如果我對「反射」的理解是正確的,那麼Reflection允許訪問有關對象的信息,包括方法名稱和變量名稱等等。在「Flex」世界中,可以使用「describeType」函數完成此操作。只是谷歌的「Flex 4內省」。 – 2011-03-17 22:54:53