Context.Current模式的缺点?

时间:2009-08-04 19:05:21

标签: .net design-patterns singleton oop

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

使用此模式优于共享/静态类/方法的任何优势吗?

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

1 个答案:

答案 0 :(得分:5)

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

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

另一种看待它的方法是,它与其他可以说是更有用的OO模式(如依赖注入)不能很好地协同工作。大多数人会说你能够使用DI而不是从方便的单一快捷方式到当前状态获得更多的里程。

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

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

相关问题