DAL(customerDAL)中的类不应该是单例吗?由于我的控制器(customerController)公开了“共享子”,然后在每次调用时,如果已经存在,则不需要创建新的DAL对象。正确的吗?
由于
答案 0 :(得分:3)
如果您有一个网站singleton dal对象非常危险,因为对该网站的每个请求都是同一个应用程序的一部分。如果构建错误,它们可能成为访问数据库的瓶颈。
答案 1 :(得分:3)
这在很大程度上取决于完整解决方案的架构。当你有很多消费者时,一个单身人士可能会很难获得。 Here是您在设计DAL时可能需要考虑的事项清单。此外,还有许多DAL模式,如Repository和一些外观,如模式。
答案 2 :(得分:3)
众所周知,Singleton对象很难测试。我将以这样的方式创建您的DAL,即实例化然后根据需要创建新的DAL并不昂贵。通过这种方式,您可以更轻松地为DAL编写单元测试,但仍然不会产生太多开销。此外,如果您将DAL创建为单例,那么如果您在多线程环境(例如Web应用程序)中使用它,则需要更加关注使其成为线程安全的。
答案 3 :(得分:0)
只有当您想确保在应用程序实例中只实例化一个类的一个实例时,才应使用Singleton。
Singleton几乎不能被认为是Code Smell。大多数使用Singleton的人使用它很糟糕。因此,当你看到一个很有可能它没有被正确使用时。
对于DAL,对象的创建并不广泛。他们应该依赖于使用连接池,然后每次需要执行命令时从池请求连接。
当然,有不同的模式可供使用,除非需要针对性能进行调整,否则您应该主要使用ORM。
请参阅NHibernate,SubSonic,Linq2Sql,Entity Framework(尚未发布?)等。