Bağlamını nasıl geçirileceğini: Bu oldukça çok yer geliyormuş gibi görünen bir tasarım kararı olduğu aracılığıyla yapan bir yönteme ihtiyaç olmayan bir yöntemle. Doğru bir cevap var mı yoksa bağlama bağlı mı?
Çözüm gerektiren örnek kod
// 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);
}
Muhtemel çözümler
- threadlocal
- global
- bağlam nesnesi
- bağımlılığı geçmek
- baz köri ve ilk arg olarak ayarlanan bağımlılık ile çubuğa geçmek
- bağımlılık enjeksiyonu
Nereye geldiğine dair örnekler
HTTP istek işleme
İstek öznitelikleri biçimindeki bağlam nesneleri sıklıkla kullanılır: bkz. Expressjs, Java Servlets veya .net'in owin'i.
Kerestecilik
Java günlüğü için halk genellikle globals / singletons kullanır. Tipik log4j / ortak günlük / java günlük kalıplarına bakın.
işlemler
İş parçacığı yerlileri, genellikle bunları gerektirmeyen tüm yöntemlere parametre olarak iletmek zorunda kalmamak için bir yöntem çağrısı zinciri ile ilişkili bir işlemi veya oturumu tutmak için kullanılır.