替代无状态对象的静态类

Mat*_*ttH 0 .net design-patterns

在过去一年左右的时间里,我一直认为如果一个方法可以是静态的,那么为了使它成为静态的,因为这可以带来性能上的好处,因此我在应用程序中最终得到了一些静态类.

我已经了解到,性能优势通常不够大,不值得,而且可以使静态方法的区别,也许不应该从设计的角度来看,如果它们更加特定于对象,那么而不是类型相关的问题

作为一个例子,我最近创建了一个FileRepository类,它实现了我们自己的File类的存储库模式(例如导入文件).此类不是静态的,必须先创建存储库对象,然后才能访问它.

我的问题是,所有我的旧静态调用,现在是2行(除非我可以在本地范围内重用该对象).存储库对象(尚未)没有状态,因为它通过线程静态变量使用数据库访问.

我的问题是,人们对在类上拥有线程静态Current属性的看法是什么,get访问器在第一次调用时初始化对象?据我了解,这仍然可以避免静态类的缺陷,例如无法通过接口实现通用功能,但仍然提供对存储库对象的单行调用的简易性?

只是试着调整我的做法和思维方式.

Jon*_*eet 5

静力学往往会损害可测试性.

特别是,你会发现测试使用存储库的任何东西都比较困难.它不是在每次调用时创建一个新的存储库,而应该是需要它的任何东西的状态的一部分.使用依赖注入来提供存储库,该存储库实现适当的接口.然后,您可以通过模拟它来测试使用存储库的任何内容.

当然,这是一种理想主义的解决方案,可能不是您案例的实用解决方案 - 但它通常是面向对象的解决方案.

可以拥有"当前"存储库并且仍然可以合理地测试,但它仍然需要静态状态,这通常是不受欢迎的.这是一种轻微的代码味道,但它至少会比静态方法更好.