Context.Current模式的缺点?

Bra*_*don 3 .net oop singleton design-patterns

对于任何大小的应用程序,使用Context.Current模式有哪些缺点?(即"Current"是"Context"类的共享/静态属性,它在第一次使用时实例化它自己)

使用这种模式比共享/静态类/方法更有优势吗?

我在.NET的上下文中问,虽然我猜它可以应用于各种语言.

Rex*_*x M 5

这是一种单例模式,通常表示线程本地存储..NET世界中一个众所周知的例子是HttpContext.

最常见的问题是可测试性.当然不是不可能,但这种模式确实鼓励了与TDD不兼容的使用模式,因此使用它需要更加警惕.在ASP.NET MVC中,我们看到一个大大改进的模式,通过该模式,上下文对象本身作为输入参数传递通过每个层,而不是依靠单例存储来访问该对象.

另一种看待它的方法是它与其他可以说是更有用的OO模式(如依赖注入)不能很好地兼容.大多数人认为你能够使用DI比从一个方便的单一快捷方式到当前状态获得更多的里程.

与任何单例或全局状态一样,它也引入了一组多线程和并发的问题.有一些完善的模式来减轻这些,但很明显,只要你使用一种需要"缓解"的模式,你就会面临很多风险,否则这些风险就不会成为问题.

对于单身人士来说,有时候会有适当的地方,但他们很少而且很少.将状态存储在单身人员中的决定应该由经验丰富的团队非常仔细地进行.没有经验的团队应该避免他们保持安全.