2009-12-17 64 views
8

我有一個Windows服務正在運行。在這個服務中我託管了一些服務(WCF)。 我需要某種「內存數據持有者」類。只要windows服務正在運行,這個類的目的就是保存不持久的數據。 該類必須可通過WCF服務訪問。他們在這個類中放置了一些值,或者從這個類中檢索一些值。單身或不是

首先我想到的是一個單身人士課程。我認爲這種模式適合這種情況。但後來我讀了一些帖子,認爲單身人士課堂並不是那麼好。

那麼這種情況還有其他的選擇嗎?或者是單身人士呢?工廠方法怎麼樣?但是,我在哪裏可以找到對象的引用?

回答

14

Singleton設計模式應該被重新標記爲反模式。 這是邪惡的。不要使用它。

更好的選擇是使用依賴注入(DI)並注入一個類,您可以使用該類來存儲所需的非持久性數據。

很多人沒有意識到WCF支持依賴注入(DI)模式,如構造函數注入沒有太多的麻煩。

如果您將注入的類作爲長壽命對象(通常稱爲Singleton 生命週期樣式,但不要與Singleton設計模式混淆),您可以繼續在調用之間訪問相同的實例。

但是,只要您使用共享對象(無論您使用辛格爾頓作爲設計圖案或一生的風格),你必須準備好處理多線程問題

在其他很多事情中,this post描述瞭如何在沒有默認構造函數時將依賴注入到WCF服務實現中。

+0

出於興趣爲什麼你認爲這個單身人士是邪惡的? – AJM 2009-12-17 12:39:52

+3

Stackoverflow知道:http://stackoverflow.com/questions/137975/what-is-so-bad-about-singletons – tanascius 2009-12-17 12:43:30

1

爲什麼你需要一個單獨的呢?

您是否確實需要將此類的實例限制爲單個實例?如果不是,不要使用單身 - 你不需要它,它只會增加你的課程的複雜性。

+0

但我將在哪裏存儲創建對象的instace引用?我的意思是,當創建對象的方法超出範圍時,對象將會丟失。 – user137348 2009-12-17 12:35:35

6

我很想知道爲什麼人們不喜歡這個單身人士,我會很樂意將它用於上述場景,除非有人能夠告訴我一些很好的理由。

它是一種簡單的模式來理解和執行,我想保持簡單是6個月的時候,你還是soemone人有保持你的代碼

編輯 一件好事已經做了一些更挖掘爲什麼有些人不喜歡單身模式一個有用的一堆替代品在這個問題中得到解決:What's Alternative to Singleton這涉及到模式的單元測試缺點。

編輯2 我終於確信,辛格爾頓可能是壞的。http://googletesting.blogspot.com/2008/08/by-miko-hevery-so-you-join-new-project.html說明了在維護方面聲明API級別的依賴性使得程序員更容易掌握依賴關係。

+1

這裏有一些很好的問題 - 你也可以谷歌「單身被認爲有害」,也 - 也應該展示有趣的討論。 – tanascius 2009-12-17 12:46:58

+0

第二篇文章真的是一個很好的和可以理解的例子...我必須自己保留...無論如何感謝和+1 – tanascius 2009-12-17 15:40:34

+0

我不相信第二個例子。這些問題可以通過驗證CreditCard構造函數中的初始化和跳閘聲明來解決。 – lorean 2011-12-21 20:18:47