使用单例进行缓存

guy*_*uyl 6 c# singleton caching

我最近读到单身是一种反模式,除非真的需要,否则不应该使用.
在我们的所有项目中,我们使用单例模式来保存一些缓存数据,例如:

class SomeClass
{
   public SomeClass()
   {
       var somedata = Singleton.Instance.GetSomeData(stringRepresintation); // or like that
       var someData = Singleton.Instance.SomeData;
   }      
}
Run Code Online (Sandbox Code Playgroud)

保存该数据的建议设计是什么(静态类或其他)?

Jon*_*eet 5

好吧,您可以将缓存视为依赖项 - 并将实例(可能是同一实例)传递到需要它的所有内容中.这就是我在已经使用依赖注入的情况下所做的事情.

这样可以更容易地测试那些需要缓存的类 - 您可以为每个测试创建一个新的缓存,而不必担心清除现有的缓存.您还可以并行化测试,而不必担心两个测试会混淆彼此的缓存.此外,它使缓存依赖性更加清晰.

(无论您使用的接口来表示缓存为cdhowie顾名思义就是给你,你不到,尽管这从它们的依赖脱钩类更多,如果你做到了.如果你的缓存是很简单的,你不要不介意在测试中使用生产实现,可能不值得提取接口.)

  • @guyl:我会使用如上所述的依赖注入。根据项目的大小,您可能想也可能不想使用 IOC 容器来帮助您 - 有时以编程方式预先创建所有内容可能会更简单;你仍然可以让所有相关的类都使用 DI。 (2认同)