Це дизайнерське рішення , що , як видається , придумати досить багато: як пройти контекст через метод , який не потребує в його метод , який робить. Чи є правильна відповідь чи це залежить від контексту.
Зразок коду, який потребує рішення
// 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);
}
Можливі рішення
- нитковий
- глобальний
- об'єкт контексту
- пройти залежність наскрізь
- curry baz і передайте його в бар із залежністю, встановленою як перший аргумент
- ін'єкційна залежність
Приклади того, де йдеться
Обробка запиту HTTP
Часто використовуються контекстні об'єкти у вигляді атрибутів запиту: див. Expressjs, Java Servlets або Owin .net.
Ведення журналів
Для ведення журналів Java люди часто використовують глобалі / синглтон. Дивіться типові шаблони журналу log4j / commons / Java.
Операції
Місцеві нитки часто використовуються для збереження транзакції або сеансу, пов'язаного з ланцюжком викликів методів, щоб уникнути необхідності передавати їх як параметри всім методам, які їм не потрібні.