簡體   English   中英

Web服務中Singleton類的影響

[英]Effect of Singleton classes in Webservices

我正在實現一個Web應用程序,並提供了一些其他的API。

以下是我的Web應用程序的結構。

服務層
服務類包含不同的API。

它調用DAO ,它是一個單例類 (我想說這是一個Enum,並且只為Enum定義了實例),並且它沒有任何狀態。 我的意思是DAO圖層類中沒有實例變量。

DAO層
DAO類獲取數據庫連接 (通過Enum類提供數據庫連接,而我在實例化Enum時創建了連接),並在數據庫上執行相應的查詢。

所以應用程序架構就是這樣。

ServiceClass {
    Dao.operation()
}

DaoEnum {

    instance;

    operation() {
        DBConnectionEnum.instance.connection.preparedStmt.respective operation
    }
}

DBConnectionEnum {
    DBConnectionEnum() {
        grabDBConnection()
    }
}

我知道我必須使用connectionpool來獲取數據庫連接,但是我無法理解由Dao層(即單例)引起的影響。

您能否建議我這是一個正確的設計,還是會耗盡應用程序? 可以進行哪些改進以使應用程序更健壯,快速且高性能?

Singleton設計模式本身就是一個好的模式,否則它不會持續這么長時間。 有一些缺點 ,例如將全局狀態引入您的應用程序。 但是我認為這些缺點不足以抵消它。 但是,有更好的方法可以做您想做的事情。 依賴注入是從實現中抽象調用的一種方法。 您甚至可以在DI實現中使用Singleton,只要它對調用透明即可。 我強烈建議您對DI進行一些研究。

我正在與同事討論此問題,根據討論,我感到我的單例DAO層一定不會對我造成任何問題。

由於DAO層在DB和Service類之間充當中介者,因此DAO層不維護任何狀態。 因此,當同時調用2個類似的請求時,兩個請求將在2個不同的線程中得到服務,並且每個線程將維護自己的堆棧。 當兩個請求都調用DAO層時,這些請求將簡單地調用DAO層的方法,該方法將與相應線程的堆棧關聯。

因此,如果我在應用程序中創建Singleton DAO層以服務多個Web請求,它將不會耗盡吞吐量,因此必須為客戶端提供服務而不會出現任何問題。

希望我沒有任何意義。 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM