นี่คือการตัดสินใจออกแบบที่ดูเหมือนจะเกิดขึ้นมากมาย: วิธีการผ่านบริบทผ่านวิธีการที่ไม่ต้องการให้เป็นวิธีการที่ทำ มีคำตอบที่ถูกต้องหรือไม่นั้นขึ้นอยู่กับบริบท
โค้ดตัวอย่างที่ต้องการโซลูชัน
// 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);
}
การแก้ปัญหาที่เป็นไปได้
- ThreadLocal
- ทั่วโลก
- วัตถุบริบท
- ผ่านการพึ่งพาผ่าน
- baz แกงและส่งผ่านเข้าไปในแถบที่มีการตั้งค่าการอ้างอิงเป็น ARG แรก
- ฉีดพึ่งพา
ตัวอย่างของที่เกิดขึ้น
การประมวลผลคำขอ HTTP
วัตถุบริบทในรูปแบบของแอตทริบิวต์คำขอมักจะใช้: ดู expressjs, Java Servlets หรือ. owin ของ. net
เข้าสู่ระบบ
สำหรับการบันทึกการใช้ Java มักใช้ globals / singletons ดูรูปแบบการบันทึก / ทั่วไปของ log4j / commons ทั่วไป
การทำธุรกรรม
เธรดเธรดมักใช้เพื่อรักษาธุรกรรมหรือเซสชันที่เชื่อมโยงกับการเรียกใช้เมธอดแบบลูกโซ่เพื่อหลีกเลี่ยงการต้องการส่งผ่านเป็นพารามิเตอร์ไปยังเมธอดทั้งหมดที่ไม่ต้องการ