2010-03-23 55 views
0

我想知道在整個應用程序中許多類中使用的內存中存儲對象的最佳方法。存儲一個對象以在多個類中使用

讓我建立了我的問題給你:

我們有多個數據庫,1%的客戶。我們也有一個主表,每一行都是關於數據庫的詳細信息,例如數據庫名稱,它所在的服務器IP以及一些配置設置。

我有一個應用程序,循環通過這些多個數據庫,並在它們上運行一些更新。我上面提到的設置將每次循環迭代更新到內存中。然後應用程序運行一系列包含使用此數據的多個類的進程。只有在循環迭代期間,數據纔會在過程中改變。

變量與客戶有關,因此我將它們存儲在客戶類中。我想我可以讓所有的成員共享,或者我應該爲客戶類使用單例嗎?我從來沒有實際使用過單身人士,只有閱讀他們擅長這種情況。對這種情況有更好的解決方案嗎?

此外,我可能有計劃此應用程序以後多線程。

對不起,如果這是混亂。如果你有問題,請告訴我,我會回答他們。

感謝您的幫助。

回答

1

爲此,我建議使用一種名爲「依賴注入」的模式,在這種情況下,這意味着您可以通過構造函數或構建後設置的屬性傳遞每個客戶需要的共享變量。您最好將變量定義爲接口,以便稍後在進行單元測試時可以放入不同的接口實現。

如果您需要線程安全性,可以將它燒入訪問器方法/屬性中。

0

在使用配置了屬性(或公共字段)所需詳細信息的客戶本地實例時,應該沒有任何問題(我認爲)。即使您要切換到將其用作多線程配置,每個將更新應用於特定數據庫的活動進程都應該在單個線程中完成,然後在該任務完成時返回,因此不需要實例數據共享(或使用單例)。也許只是將參數中特定於進程的數據提供給可以在工作線程上調用的方法?

依賴注入可能也是一種很好的方法。

0

將此數據存儲在系統緩存中將成爲我認爲的最佳選擇。

現在你如何做到這一點取決於你將要做什麼。該應用是多線程的嗎?是否要頻繁更新此客戶數據或僅在啓動時更新?

如果應用程序不是多線程的,單身人士將完全按照您的需要進行操作。但是,如果它是多線程的,有一些事情需要考慮。如果你打算在大多數情況下讀取並且更新很少,並且更新很快且很少,那麼線程安全的singleton就可以正常工作。然而,如果你要做大量的更新,即使是一個線程安全的單身人士也會很快進入競賽狀態。

相關問題