2011-04-09 93 views
1

如果我有一個對象與Save(),GetProduct(prod id)等存儲庫一起工作,那麼將它作爲asp.net應用程序中的單身人士是個好主意。單身人士 - 是否有用

我的想法是,因爲我有很多訪問數據庫,這將提高性能,因爲它不腰部的時間每次都重新創建存儲庫對象。 我在任何樣品中都沒有看到過這樣的東西,爲什麼這是錯的? 感謝

+0

如果您不需要多個存儲庫對象實例,那當然是一個好習慣。 – Headshota 2011-04-09 07:21:54

回答

0

不幸的是它真的取決於你如何訪問您的數據庫,以及如何你的資料庫類是真正抽象的數據庫連接和事務。

如果你只是談論創建一個在內存中的對象爲每個HTTP請求的費用那麼它是不是一個大問題。這真的不值得考慮。

如果你正在談論低級別的數據庫的東西,那麼它又取決於它。

特別是隨着像的LINQ的ORM SQL或NHibernate的,你如何管理他們的會議是非常重要的。通常,雖然你不希望「會話」或「數據上下文的」範圍超出http請求,那麼不,如果單例將單獨的數據庫會話保存爲單例本身,那麼單例並不是一個好主意。

也考慮使用IoC容器,例如Castle Windsor。然後,改變特定類別的「生活方式」(單例,瞬時,每個Web請求等)是一個簡單的配置更改,並使您的應用程序更加靈活。

此外,聊到DB本身更昂貴的是在內存中創建新的對象,所以如果你真的表現後認爲聰明的緩存。

最後,在考慮單身人士時,從概念的角度來考慮它,而不是表現。這個對象是Singleton有意義嗎?

1

只是要carreful在ASP .NET單身意味着你的網站的所有用戶都將使用它來訪問數據。這意味着你可能必須鎖定你的方法,這可能會導致瓶頸。

我記得有一次我曾與單數據管理一個真正奇怪的錯誤在ASP應用程序。 如果您不想在用戶每次請求頁面時重新創建回購,還可以將數據存儲庫對象置於用戶會話中。