这是出现要拿出相当多的设计决策:如何通过上下文通过并不需要它,做的方法等。是否有一个正确的答案,或者它取决于上下文。
需要解决方案的示例代码
// needs the dependency
function baz(session) {
session('baz');
}
// doesn't care about the dependency
function bar() {
baz();
}
// needs the dependency
function foo(session) {
session('foo')
bar();
}
// creates the dependency
function start() {
let session = new Session();
foo(session);
}
可能的解决方案
- 本地线程
- 全球
- 上下文对象
- 通过依赖
- 咖喱baz并将其传递给bar,并将依赖项设置为第一个arg
- 依赖注入
哪里出现的例子
HTTP请求处理
经常使用请求属性形式的上下文对象:请参见expressjs,Java Servlet或.net的owin。
记录中
对于Java日志记录,人们经常使用全局变量/单例。请参阅典型的log4j / commons日志记录/ java日志记录模式。
交易次数
线程局部变量通常用于使事务或会话与方法调用链相关联,以避免需要将它们作为参数传递给所有不需要它们的方法。