Dependency injection (DI) เป็นแนวคิดในการออกแบบที่ลดความผูกพันระหว่างคลาสหรืออ็อบเจกต์ ซึ่งจะทำให้มีการผูกพันลดลงและมีการส่งผ่านอิสระระหว่างกันมากขึ้น
Without Dependency Injection
ในตัวอย่างนี้เรามี class UserServiceWithoutDI
และทำการสร้าง Instance ของ EmailService
ภายใน class เลย
จากตัวอย่างด้านบน แน่นอนว่ามันทำงานได้ปกติ แต่มันมีการผูกติดกันและไม่ถูกตามหลัก OOP สักเท่าไหร่ ทำให้ยากต่อทดสอบและการแก้ไขในภายหลังด้วย
With Dependency Injection
วิธีการที่ดี เราควรจะทำด้วยวิธีการ initialize
แล้วทำการส่ง emailService
เข้าไปใน init
อีกที
อาจจะดูเหมือนเขียนเพิ่มอีกบรรทัด แต่จะทำให้ code ของเราแยกกัน และอ่านง่ายมากยิ่งขึ้นและทำให้ง่ายต่อการทดสอบอีกด้วย