2010-07-14 46 views
0

我正在構建一個工具。我有一個收集類,它存儲從網絡上的文件收集的數據。 (爲什麼?因爲從網絡文件讀取比一次讀取所有數據和將數據存儲到一個對象更耗時) 我需要在各種不同的類中使用相同的實例。
我查看了Singleton類的pro和con,並決定使用它,因爲我感覺在Collection類的序列化對象周圍傳遞並不是一個好主意。Singleton Class Vs序列化對象,CSharp

這是一個很好的編程技術嗎?還是有更好的解決方案。我可以提供更多的細節,如果我沒有說清楚

感謝,
- 伊瓦爾
P.S:我不知道,如果這已經被問上話,請指引我正確的崗位,如果是的。

+0

這聽起來像也許你可能正在讀取信息,然後將其存儲在數據庫(或文件,取決於)供您的程序的其他部分使用。 – 2010-07-14 21:53:12

+0

[單身人士:好設計還是柺杖?](http:// stackoverflow。com/questions/11831/singletons-good-design-or-a-crutch) – ripper234 2010-07-14 21:55:54

+0

'我查看了Singleton Classes的pro和con,並決定使用它,因爲我覺得我的Collection類的序列化對象傳遞的不是一個好主意。「你能詳細說明你爲什麼認爲這不是一個好主意嗎? – 2010-07-14 21:55:55

回答

3

這取決於你的單身做什麼。我會假設我們的單身人士由於某種原因收集文件,然後對它們進行某種聚合。如果是這樣的話,單身者是一個好主意。

如果您使用單例作爲緩存,那麼假設單例對象是負責維護緩存的對象,這也可能是有意義的。由於我不知道你的平臺,我不能告訴你使用一個特定的緩存管理器,而不是...

這就是說,單身人士往往是一個過度使用的編程結構,你應該有點警惕他們。在決定是否使用某個工具時,問問自己單身管理是否管理某種類型的單個受限資源。這通常是我發現自己使用它們的唯一原因。

這幾乎不可能告訴你我的設計很有意義,但是,我們不知道數據會發生什麼以及它應該如何發生。

+0

我想這是我能得到的最好的論點。我的平臺是C#,我的集合類在從文件中讀取數據的聚集後執行緩存。 - Ivar – 2010-07-14 21:58:18

1

當它是期望的行爲時,單身並不是一個壞模式。但是,您不應該在類中實現Singleton。

相反,使用Inversion of Control框架,如Guice。然後,你的類的消費者可以確定它的生命週期(不管它是否是單例)。

+0

+1用於指出作爲生命週期的**靜態**單身人士和單身人士之間的區別 – whiskeysierra 2010-07-14 21:59:15

0

我認爲構建一個Singleton類是一個很好的選擇,通過這種方式,所有其他類將共享相同的實例,並且避免重複和傳遞收集的數據。

我對你有兩個問題:

  1. 你知道你的班有多大/重 可能成爲?由於它會收集 數據,因此它可能變得非常沉重。

  2. 應用程序關閉時,將 你需要收集的數據 持續到一個數據庫或某種 緩存?

+0

收集的數據當然非常重。不,我不需要保存數據,因爲它僅適用於每個用戶的一個實時會話。 - Ivar – 2010-07-14 21:59:58