Context.Current模式的缺点是什么?

3

对于任何规模的应用程序,使用Context.Current模式有什么缺点?(即,“Current”是“Context”类的共享/静态属性,在第一次使用时实例化自己)

与只使用共享/静态类/方法相比,使用此模式的任何优势是什么?

我是在.NET上下文中提出这个问题的,尽管我想它可能适用于各种语言。

1个回答

5
这是一种单例模式,通常表示线程本地存储。在.NET世界中,HttpContext是一个众所周知的例子。
最常见的问题是可测试性。当然不是不可能,但该模式鼓励使用与TDD不兼容的使用模型,因此使用它需要额外的警惕。在ASP.NET MVC中,我们看到了一种改进的模式,即将上下文对象本身作为输入参数通过每个层传递,而不是依赖于单例存储来访问该对象。
另一种看待它的方式是,它与其他更有用的OO模式(如依赖注入)并不兼容。大多数人会认为,与方便的单例状态快捷方式相比,能够使用DI会获得更多的收益。
与任何单例或全局状态一样,它也引入了一系列与多线程和并发相关的问题。有成熟的模式可以缓解这些问题,但显然,任何时候使用需要“缓解”的模式都会使您面临许多风险,否则这些问题将不是问题。
有时单例是合适的地方,但它们非常少见。经验丰富的团队应该非常谨慎地决定将状态存储在单例中。对于经验不足的团队来说,为了安全起见,应该避免使用它们。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接