我正在寻找一个处理 MVC3/.Net 应用程序的数据库访问的类。
该类是静态的,并为常见的 DB 查询提供了很好的便利方法 - 诸如“GetColumnBValueForColumnA()”之类的各种有趣的东西,以及更复杂的查询。它针对给定的解决方案和域很好地考虑/优化。
但是,将类视为静态的,引发了一些关于这可能是一个坏主意的半遗忘记忆(也许在多线程的上下文中?),我无法摆脱这种感觉。
保持这种类静态是个好主意,还是应该为每个数据库调用实例化它?
我正在寻找一个处理 MVC3/.Net 应用程序的数据库访问的类。
该类是静态的,并为常见的 DB 查询提供了很好的便利方法 - 诸如“GetColumnBValueForColumnA()”之类的各种有趣的东西,以及更复杂的查询。它针对给定的解决方案和域很好地考虑/优化。
但是,将类视为静态的,引发了一些关于这可能是一个坏主意的半遗忘记忆(也许在多线程的上下文中?),我无法摆脱这种感觉。
保持这种类静态是个好主意,还是应该为每个数据库调用实例化它?
保持这种类静态是个好主意,还是应该为每个数据库调用实例化它?
如果您关心应用程序各层之间的弱耦合、这些层的可重用性、孤立的单元测试之类的事情,那么您不应该做上述任何事情。您应该使用抽象。
如果您不关心这些事情,那么静态方法就可以了。使用静态方法时唯一需要注意的是将它们设计为可重入且不依赖于任何共享状态以实现线程安全。在所有情况下,请确保通过将所有 IDisposable 资源包装在 using 语句中来正确处置所有 IDisposable 资源,例如数据库连接和命令。
保持这种类静态是个好主意,还是应该为每个数据库调用实例化它?
这些不是您唯一的两个选择。
类不应该是静态的:通过将其设为静态,您放弃了面向对象编程的一些重要优势,而实际上一无所获。
相反,它的一个实例应该通过基于构造函数的依赖注入提供给你的控制器。是否为每个请求重新实例化该类,或者您最终是否使用单例,然后由您的 DI 绑定代码确定。您可以随时更改它。
这里有几个优点:
我可以继续。静态类会扼杀你的灵活性,并且在 99% 的情况下都没有实际优势。