使用静态方法与数据库连接 - 任何潜在的问题?

blu*_*lds 2 .net database-abstraction static-class asp.net-mvc-3

我正在寻找一个处理MVC3/.Net应用程序的数据库访问的类.

该类是静态的,为常见的数据库查询提供了很好的方便方法 - 各种各样的东西,如"GetColumnBValueForColumnA()",以及更复杂的查询.对于给定的解决方案和域,它是一个很好的因子/优化因素.

然而,看到这个类是静态的,引发了一些关于这可能是一个坏主意的遗忘的记忆(也许是在多线程的背景下?),我无法摆脱这种感觉.

保持这种类静态是一个好主意,还是应该为每个数据库调用实例化它?

Dar*_*rov 5

保持这种类静态是一个好主意,还是应该为每个数据库调用实例化它?

如果您关心应用程序层之间的弱耦合,这些层的可重用性,单独的单元测试,则不应该执行上述任何操作.你应该使用抽象.

如果你不关心那些东西那么静态方法就好了.使用静态方法时唯一要小心的是设计它们以便它们是可重入的,并且不依赖于任何共享状态以保证线程安全.在所有情况下,请确保通过将它们包装在using语句中来正确处置所有IDisposable资源,例如数据库连接和命令.

  • @blueberryfields,.NET中的具体抽象是接口或抽象类.所以基本上你的控制器动作应该把接口或抽象类作为构造函数参数,它将定义你愿意执行的所有操作的契约.然后,您应配置您喜欢的依赖注入工具,以将此存储库或数据访问协定的特定实现注入控制器.我们现在说在整个合同中控制器和数据访问层之间存在弱耦合. (2认同)