이것은 상당히 많은 것으로 보이는 디자인 결정입니다. 컨텍스트 를 필요로하지 않는 메소드를 통해 컨텍스트를 전달 하는 방법. 정답이 있거나 상황에 따라 달라 집니까?
솔루션이 필요한 샘플 코드
// 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);
}
가능한 해결책
- 스레드 로컬
- 글로벌
- 컨텍스트 객체
- 의존성을 통과시키다
- 카레 바즈와 의존성을 첫 번째 인수로 설정하여 바에 전달하십시오.
- 의존성 주입
어디에서 나오는지 예
HTTP 요청 처리
요청 속성 형식의 컨텍스트 객체가 자주 사용됩니다 (expressjs, Java Servlets 또는 .net의 owin 참조).
벌채 반출
Java 로깅 사람들은 종종 글로벌 / 싱글 톤을 사용합니다. 일반적인 log4j / commons logging / java 로깅 패턴을 참조하십시오.
업무
스레드 로컬은 종종 필요하지 않은 모든 메소드에 매개 변수로 전달하지 않아도되도록 일련의 메소드 호출과 연관된 트랜잭션 또는 세션을 유지하는 데 사용됩니다.