.net 单态DAL类

.net 单态DAL类,.net,singleton,data-access-layer,.net,Singleton,Data Access Layer,DAL(customerDAL)中的类不应该是单例的吗?因为我的控制器(customerController)公开了“共享子对象”,所以在每次调用时,如果已经存在,就不需要创建新的DAL对象。对吗 谢谢你,如果你有一个网站,单例dal对象是非常危险的,因为对该网站的每个请求都是同一个应用程序的一部分。如果构建错误,它们可能成为访问数据库的瓶颈。这在很大程度上取决于完整解决方案的体系结构。当你有很多消费者时,一个单身汉可能很难得到。是设计DAL时可能要考虑的事项清单。此外,还有许多DAL模式,如R

DAL(customerDAL)中的类不应该是单例的吗?因为我的控制器(customerController)公开了“共享子对象”,所以在每次调用时,如果已经存在,就不需要创建新的DAL对象。对吗


谢谢你,如果你有一个网站,单例dal对象是非常危险的,因为对该网站的每个请求都是同一个应用程序的一部分。如果构建错误,它们可能成为访问数据库的瓶颈。

这在很大程度上取决于完整解决方案的体系结构。当你有很多消费者时,一个单身汉可能很难得到。是设计DAL时可能要考虑的事项清单。此外,还有许多DAL模式,如Repository和一些facade模式。

单例对象很难测试。我会考虑以这样一种方式创建DAL,即实例化并根据需要创建一个新的DAL并不昂贵。通过这种方式,您将能够更轻松地为DAL编写单元测试,并且不会产生太多开销。此外,如果您将DAL创建为单实例,那么如果您在多线程环境(如web应用程序)中使用DAL,则需要更加关注如何使其具有线程安全性。

只有当您希望确保在应用程序实例中只实例化一个类实例时,才应使用单实例

单身汉几乎不能被视为一种代码气味。大多数使用Singleton的人都使用得很糟糕。因此,当你看到一个有很大的机会,它没有被正确使用

至于DAL,对象的创建是不可扩展的。他们应该依赖于使用连接池,然后在每次需要执行命令时从连接池请求连接

当然,有不同的模式可用,除非需要调整请求以提高性能,否则您应该主要使用ORM


请看,,(尚未发布?)等。

是的,除了极少数例外情况外,DAL不包含任何状态,这一点也不成问题,因为没有什么要锁定()或类似的东西。我在哪里可以看到一些DAL模式?我不知道有任何一站式资源用于此,但如果您在周围搜索,您肯定会找到它们。也许你可以编辑你的问题并添加这一点。这对我们两个都有帮助:)好的,我同意Singleton Dal可能有一些问题。但是我认为我们可以创建Singleton数据库帮助器。这里有什么问题吗。请在有空的时候回复。@kumary,没有我说不清的上下文。通常我避免使用单例实现,因为它们很难测试,并在适当的地方使用依赖项注入来注入“单例”实例,比如应用程序设置,这些设置通常是延迟加载的只读属性。如果您的helper方法是没有任何外部状态的静态方法,那么它们可以是没有单例模式的静态方法——但这将是一种不同类型的代码味道(即过程代码与OO代码)。