1
A
回答
2
從可測性的角度來看,全局變量和單例是非常相似的,它們不必分開處理。良好的OO設計應該像樂高積木一樣適合創建最終的系統。全局的主要問題是你失去了隔離。當您使用全局或單例訪問您的協作者時,這些類不再是獨立的磚塊,您可以輕鬆地進行重組,在另一個項目中單獨使用或重用。當你學習一些依賴於全局變量的類時,可以使用它拖動其餘的設計。在測試中這會產生問題,因爲您必須採取額外的步驟來切斷您的班級與其協作者之間的連接,以便您可以對其進行單獨測試。 (我的博客上寫了more about this)
問題的一個很好的解決方案是從外部提供類依賴關係。你只需引入某種機制(也許是一個簡單的類),它將把所有孤立的磚塊連接起來,並將它們連接到組成應用程序的對象圖中。這就是控制反轉和依賴注入的全部內容。
1
沒有各種各樣的全球狀態。要麼是全局狀態,要麼是全局狀態。 Singleton反模式只是消除了各種初始化頭痛,但它與全局變量相同。
如何避免全局狀態?創建一些本地狀態並傳遞參考或指針。在絕大多數事件中,全球狀態是不必要的。有是必要的全局狀態的一些例子,如堆,但它們非常罕見,如果你需要問,那麼你幾乎肯定不知道什麼時候是正確的。
2
相關問題
- 1. 安全缺陷:如何避免它們?
- 2. 全局變量,如何避免它們
- 3. DTO,如何避免它們?
- 4. ObjectSpace - 它是什麼以及人們如何使用它?
- 5. Php,爲什麼「全球容器」不好,以及如何避免它?
- 6. JavaScript中的內存泄漏:它們是什麼,如何識別它們以及如何創建它們
- 7. 爲什麼jQuery插件發生衝突,以及如何避免它們?
- 8. 符號常數:它們如何存儲以及它們的類型是什麼?
- 9. 準備好的語句以及它們如何影響查詢
- 10. 什麼是野外注射以及如何避免它?
- 11. 無狀態和有狀態系統之間有什麼區別,它們如何影響並行性?
- 12. 什麼是IntelliJ中的「手錶」以及如何使用它們?
- 13. 什麼是NULL值,以及如何在SQLite中處理它們
- 14. 什麼是intvectors以及如何閱讀/使用它們?
- 15. 什麼是默認的ReflectPermissions以及如何更改它們?
- 16. 什麼是StringIndexer,VectorIndexer以及如何使用它們?
- 17. 什麼是BitBucket中的分支以及如何管理它們
- 18. Android:這些菜單是什麼以及如何構建它們?
- 19. 什麼是sqlite開發標題以及如何安裝它們?
- 20. 這些是什麼以及如何使用Ruby刪除它們?
- 21. 什麼是cufon和畫布以及如何覆蓋它們
- 22. 什麼是ResourceContainers以及如何將它們用於雲端點?
- 23. 什麼是服務器日誌以及如何生成它們?
- 24. PHP庫 - 它們是什麼,以及如何創建一個
- 25. std :: function和std :: bind:它們是什麼以及它們何時被使用?
- 26. SQL,Postgres OID,它們是什麼以及它們爲什麼有用?
- 27. 我們可以修改limits.h嗎?它會產生什麼影響?
- 28. 測試計劃以及如何最好地編寫它們
- 29. 一個類的實例以及如何測試它們
- 30. Symfony中的助手是什麼以及我們如何創建它們?
+100對於MiškoHevery的任何事情。 – zoul 2011-01-19 11:44:08