繁体   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