Esta es una decisión de diseño que parece surgir bastante: cómo pasar el contexto a través de un método que no lo necesita a un método que sí lo necesita. ¿Hay una respuesta correcta o depende del contexto?
Código de muestra que requiere una solución
// 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);
}
Soluciones posibles
- hilo local
- global
- objeto de contexto
- pasar la dependencia a través de
- curry baz y pasarlo a la barra con la dependencia establecida como el primer argumento
- inyección de dependencia
Ejemplos de dónde viene
Procesamiento de solicitudes HTTP
Con frecuencia se usan objetos de contexto en forma de atributos de solicitud: consulte expressjs, Java Servlets o .net's owin.
Inicio sesión
Para el registro de Java, la gente a menudo usa globals / singletons. Vea los patrones típicos de log4j / commons logging / java logging.
Actas
Los locales de subprocesos a menudo se usan para mantener una transacción o sesión asociada con una cadena de llamadas a métodos para evitar la necesidad de pasarlos como parámetros a todos los métodos que no los necesitan.