2009-01-13 65 views
4

DAL(customerDAL)中的類不應該是單例嗎?由於我的控制器(customerController)公開了「Shared Subs」,因此在每次調用時,如果已經存在,則不需要創建新的DAL對象。正確?Singleton DAL類

感謝

回答

3

單身物體是非常難以測試的。我會考慮創建DAL的方式,以便根據需要實例化並創建新的DAL並不昂貴。通過這種方式,您可以更輕鬆地編寫DAL的單元測試,而且不會產生太多的開銷。此外,如果您將DAL創建爲單例,那麼如果您在多線程環境(如Web應用程序)中使用DAL,則需要更加關心使其成爲線程安全。

3

如果你有一個網站單DAL對象是非常危險的,因爲該網站的每個請求是同一個應用程序的一部分。如果構建錯誤,它們可能成爲訪問數據庫的瓶頸。

+0

呀,只不過,除了極少數例外,該DAL不包含狀態,這不會是在問題所有,因爲沒有什麼可以鎖定()或類似的東西。 – 2009-01-13 23:08:21

3

它高度依賴於完整解決方案的體系結構。當你有很多消費者時,一個單身人士可能會很難得到。 Here是您在設計DAL時可能需要考慮的事項清單。此外,還有許多DAL模式,如Repository和一些類似模式的外觀。

+0

我可以在哪裏看到一些dal圖案? – 2009-01-13 23:14:28

+0

我不知道任何一個停止資源,但如果你谷歌周圍你會發現他們的肯定。也許你可以編輯你的問題並添加這一點。它會幫助我們兩個:) – Perpetualcoder 2009-01-13 23:22:51

0

只有當您希望確保在您的應用程序實例內只實例化一個類的實例時,才應該使用單例。

單身人士幾乎不能被視爲代碼嗅覺。大多數使用辛格爾頓的人使用它很糟糕。因此,當你看到一個有很大的機會,它不正確使用。

至於DAL,對象不能廣泛創建。他們應該依靠使用連接池,然後在每次執行命令時從池中請求連接。

當然,有不同的模式可用,你應該主要使用ORM,除非請求需要調整性能。

NHibernateSubSonicLinq2SqlEntity Framework(尚未公佈?)等