Ini adalah keputusan desain yang tampaknya muncul cukup banyak: bagaimana melewati konteks melalui metode yang tidak membutuhkannya ke metode yang melakukannya. Apakah ada jawaban yang benar atau tergantung pada konteksnya.
Kode sampel yang membutuhkan solusi
// 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);
}
Solusi yang memungkinkan
- threadlocal
- global
- objek konteks
- melewati ketergantungan melalui
- kari baz dan operasikan ke bar dengan dependensi yang ditetapkan sebagai argumen pertama
- injeksi ketergantungan
Contoh di mana muncul
Pemrosesan permintaan HTTP
Objek konteks dalam bentuk atribut permintaan sering digunakan: lihat expressjs, Java Servlets atau .net's owin.
Penebangan
Untuk Java logging rakyat sering menggunakan global / lajang. Lihat pola log4j / commons logging / java logging.
Transaksi
Utas lokal sering digunakan untuk menyimpan transaksi atau sesi yang terkait dengan serangkaian panggilan metode untuk menghindari keharusan meneruskannya sebagai parameter ke semua metode yang tidak membutuhkannya.