ก่อนอื่นฉันต้องการแยกวิธีการออกแบบออกจากแนวคิดของกรอบงาน การฉีดพึ่งพาในระดับที่ง่ายที่สุดและพื้นฐานที่สุดคือ:
วัตถุแม่ให้การอ้างอิงทั้งหมดที่จำเป็นสำหรับวัตถุลูก
แค่นั้นแหละ. โปรดทราบว่าไม่มีสิ่งใดในนั้นที่ต้องใช้อินเทอร์เฟซเฟรมเวิร์กรูปแบบการฉีด ฯลฯ เพื่อความเป็นธรรมฉันได้เรียนรู้เกี่ยวกับรูปแบบนี้เป็นครั้งแรกเมื่อ 20 ปีก่อน มันไม่ใช่เรื่องใหม่
เนื่องจากมีมากกว่า 2 คนที่มีความสับสนเกี่ยวกับคำว่าผู้ปกครองและเด็กในบริบทของการฉีดพึ่งพา:
- ผู้ปกครองเป็นวัตถุที่ instantiates และกำหนดค่าวัตถุเด็กจะใช้
- เด็กเป็นส่วนประกอบที่ถูกออกแบบมาให้ instantiated อดทน นั่นคือมันถูกออกแบบมาให้ใช้สิ่งที่ขึ้นอยู่กับการพึ่งพาของผู้ปกครองและไม่ยกตัวอย่างการพึ่งพาของตัวเอง
ฉีดพึ่งพาเป็นรูปแบบสำหรับวัตถุองค์ประกอบ
ทำไมอินเตอร์เฟส
การเชื่อมต่อเป็นสัญญา พวกเขามีอยู่เพื่อ จำกัด วิธีการรวมสองวัตถุได้แน่น ไม่ใช่ทุกสิ่งที่ต้องมีอินเทอร์เฟซ แต่พวกมันช่วยในการเขียนโค้ดแบบแยกส่วน
เมื่อคุณเพิ่มในแนวคิดของการทดสอบหน่วยคุณอาจมีการนำไปใช้เชิงแนวคิดที่สองสำหรับอินเทอร์เฟซที่กำหนดใด ๆ : วัตถุจริงที่คุณต้องการใช้ในโปรแกรมประยุกต์ของคุณและวัตถุที่เยาะเย้ยหรือ stubbed คุณใช้สำหรับการทดสอบรหัสที่ขึ้นอยู่กับวัตถุ เพียงอย่างเดียวนั่นก็เพียงพอแล้วสำหรับอินเทอร์เฟซ
ทำไมกรอบ
การเริ่มต้นและให้การอ้างอิงกับวัตถุลูกเป็นหลักสามารถ daunting เมื่อมีจำนวนมากของพวกเขา กรอบการทำงานให้ประโยชน์ดังต่อไปนี้:
- การอ้างอิงการพึ่งพาคอมโพเนนต์
- การกำหนดค่าส่วนประกอบด้วยการตั้งค่าบางอย่าง
- ทำให้รหัสแผ่นหม้อไอน้ำเป็นแบบอัตโนมัติเพื่อให้คุณไม่ต้องเขียนมันในหลาย ๆ ที่
พวกเขายังมีข้อเสียดังต่อไปนี้:
- วัตถุหลักคือ "คอนเทนเนอร์" และไม่ใช่สิ่งใดในรหัสของคุณ
- มันทำให้การทดสอบมีความซับซ้อนมากขึ้นถ้าคุณไม่สามารถให้การอ้างอิงโดยตรงในรหัสทดสอบของคุณ
- มันสามารถชะลอการเริ่มต้นในขณะที่มันแก้ไขการอ้างอิงทั้งหมดโดยใช้การสะท้อนและเทคนิคอื่น ๆ อีกมากมาย
- การดีบักรันไทม์อาจทำได้ยากโดยเฉพาะอย่างยิ่งถ้าคอนเทนเนอร์แทรกพร็อกซีระหว่างอินเตอร์เฟสและส่วนประกอบจริงที่ใช้อินเทอร์เฟซนั้น คอนเทนเนอร์เป็นกล่องดำและไม่ได้ถูกสร้างขึ้นด้วยแนวคิดใด ๆ ในการอำนวยความสะดวกในกระบวนการแก้ไขข้อบกพร่อง
ทั้งหมดที่กล่าวว่ามีการแลกเปลี่ยน สำหรับโครงการขนาดเล็กที่มีชิ้นส่วนที่เคลื่อนไหวไม่มากนักและมีเหตุผลเล็กน้อยที่จะใช้ DI Framework อย่างไรก็ตามสำหรับโครงการที่ซับซ้อนมากขึ้นซึ่งมีส่วนประกอบบางอย่างที่ทำไว้แล้วสำหรับคุณเฟรมเวิร์กสามารถพิสูจน์ได้
แล้ว [บทความแบบสุ่มบนอินเทอร์เน็ต] ล่ะ?
แล้วมันล่ะ? หลาย ๆ ครั้งที่ผู้คนสามารถตื่นตัวและเพิ่มข้อ จำกัด มากมายและด่าทอคุณหากคุณไม่ได้ทำสิ่งที่เป็น ไม่มีทางใดทางหนึ่งที่แท้จริง ดูว่าคุณสามารถแยกสิ่งที่มีประโยชน์จากบทความและไม่สนใจสิ่งที่คุณไม่เห็นด้วย
กล่าวโดยย่อให้คิดด้วยตัวเองและลองทำดู
การทำงานกับ "หัวเก่า"
เรียนรู้ให้มากที่สุด สิ่งที่คุณจะพบกับนักพัฒนาจำนวนมากที่ทำงานในยุค 70 ของพวกเขาคือพวกเขาได้เรียนรู้ที่จะไม่ดื้อรั้นเกี่ยวกับสิ่งต่างๆมากมาย พวกเขามีวิธีการที่พวกเขาได้ทำงานร่วมกันมานานหลายทศวรรษเพื่อให้ได้ผลลัพธ์ที่ถูกต้อง
ฉันได้รับสิทธิพิเศษในการทำงานกับสิ่งเหล่านี้และพวกเขาสามารถให้ข้อเสนอแนะที่ซื่อสัตย์อย่างไร้ความปราณีที่ทำให้รู้สึกได้ และสถานที่ที่พวกเขาเห็นคุณค่าพวกเขาเพิ่มเครื่องมือเหล่านั้นไปยังเพลงของพวกเขา