คำถามติดแท็ก dependency-injection

การพึ่งพาการฉีดเป็นรูปแบบการออกแบบที่พึ่งพา (อินสแตนซ์ของวัตถุคุณสมบัติ) ขององค์ประกอบที่มีการตั้งค่าผ่านตัวสร้างวิธีการหรือสาขา (คุณสมบัติ) มันเป็นรูปแบบพิเศษของการผกผันของการพึ่งพาทั่วไป

2
ค่อยๆย้าย codebase ไปยังคอนเทนเนอร์ฉีดที่ต้องพึ่งพา
ฉันมี codebase ขนาดใหญ่ที่มีซิงเกิล "anti-pattern" จำนวนมากคลาสยูทิลิตี้ที่มีวิธีการคงที่และคลาสที่สร้างการอ้างอิงของตนเองโดยใช้newคำหลัก มันทำให้รหัสยากมากที่จะทดสอบ ฉันต้องการที่จะโยกย้ายรหัสไปยังภาชนะฉีดพึ่งพา (ในกรณีของฉันมันGuiceเพราะมันเป็นGWTโครงการ) จากความเข้าใจของฉันเกี่ยวกับการฉีดขึ้นอยู่กับมันทั้งหมดหรือเปล่า คลาสทั้งหมดได้รับการจัดการโดย Spring / Guice หรือไม่ เนื่องจาก codebase มีขนาดใหญ่ฉันไม่สามารถแปลงรหัสข้ามคืนได้ ดังนั้นฉันต้องการวิธีที่จะทำมันค่อยๆ ปัญหาคือเมื่อฉันเริ่มต้นด้วยคลาสที่ต้องถูกฉีดเข้าไปในคลาสอื่นฉันไม่สามารถใช้วิ@Injectในคลาสเหล่านั้นได้เนื่องจากคลาสเหล่านั้นยังไม่ได้รับการจัดการโดยคอนเทนเนอร์ ดังนั้นสิ่งนี้จะสร้างสายโซ่ยาวขึ้นไปถึงคลาส "สุดยอด" ที่ไม่ได้ถูกฉีดเข้าไปที่ใดก็ได้ วิธีเดียวที่ฉันเห็นคือการทำให้Injectorบริบท / แอปพลิเคชันทั่วโลกพร้อมใช้งานผ่านซิงเกิลตันในขณะนั้นเพื่อให้คลาสอื่นสามารถรับถั่วที่ถูกจัดการได้ แต่มันขัดแย้งกับแนวคิดสำคัญที่ไม่เปิดเผยcomposition rootแอปพลิเคชัน อีกวิธีคือล่างขึ้นบน: เริ่มต้นด้วยคลาส "ระดับสูง" รวมไว้ในคอนเทนเนอร์ฉีดขึ้นต่อกันและค่อย ๆ เลื่อนลงไปที่คลาส "เล็ก" แต่ฉันต้องรอเป็นเวลานานเนื่องจากฉันสามารถทดสอบชั้นเรียนขนาดเล็กที่ยังคงขึ้นอยู่กับกลม / สถิตยศาสตร์ อะไรจะเป็นวิธีที่จะทำให้เกิดการย้ายถิ่นฐานอย่างค่อยเป็นค่อยไป? ป.ล. คำถามที่ค่อยเป็นค่อยไปวิธีการฉีดพึ่งพาจะคล้ายกันในชื่อ แต่ไม่ตอบคำถามของฉัน

2
การทำให้เป็นอันดับทำให้การใช้การฉีดพึ่งพาหรือไม่
คำถามง่าย ๆ : ฉันเข้าใจว่าการทำให้เป็นอันดับใน C # ต้องใช้ตัวสร้างเริ่มต้น นี้จะขจัดความเป็นไปได้ของการใช้สร้างฉีด DI (ซึ่งโดยทั่วไปคือสไตล์ที่ชื่นชอบของ DI ในการอ่านของฉัน[อ้างจำเป็น] ) ดังนั้นมันจึงเป็นเหตุการณ์หรือสถานการณ์จริง ๆ หรือฉันกำลังทำอะไรบางอย่างหายไป? (คำถามด้านข้าง): IoC ทำหน้าที่บรรจุขั้นตอนนี้หรือไม่?

3
การฉีดแบบพึ่งพานั้นไม่เพียงแค่เคลื่อนย้ายความซับซ้อนไปยังคลาสอื่น ๆ
ฉันกำลังมองหาการใช้กรอบการทำงานของพายุไต้ฝุ่นสำหรับการฉีดพึ่งพา ฉันได้รับว่าการแยกการก่อสร้างวัตถุนั้นมีประโยชน์สำหรับการแทนที่ส่วนประกอบโดยพลการด้วย mocks ระหว่างการทดสอบหน่วยและจนถึงตอนนี้ฉันได้เห็นประโยชน์จากสิ่งนี้เพียงอย่างเดียว แต่ฉันไม่สามารถช่วยได้ แต่คิดว่าก่อนที่ฉันจะมีคลาสตัวควบคุมมุมมองที่มีขนาดใหญ่ซึ่งมีการนำเข้าส่วนหัวนับสิบตอนนี้ฉันมีระดับโรงงานที่มีขนาดมหึมาซึ่งมีส่วนหัวที่นำเข้าหลายสิบ ฉันควรจะหลีกเลี่ยงการมีโรงงานขนาดใหญ่หรือไม่?

3
การรักษาโมเดล MVC ไว้อย่างหลวม ๆ จากฐานข้อมูลหรือไม่
ฉันชอบที่จะให้โค้ดของฉันทดสอบได้และตัดสินใจที่จะใช้กลยุทธ์ Dependency-Injection สำหรับกรอบงาน MVC ปัจจุบันของฉันซึ่งได้พิสูจน์แล้วว่าเป็นวิธีที่ยอดเยี่ยมในการทำให้มั่นใจได้ว่าโค้ดคู่กันอย่างหลวม ๆ ความสามารถในการทดสอบและโมดูล แต่เมื่ออยู่ไกลจากต้นแบบในรูปแบบการออกแบบฉันมีช่วงเวลาที่ยากลำบากในการหาวิธีที่ดีในการรักษาแบบจำลองของฉันให้แน่นควบคู่ไปกับคลาสตัวเชื่อมต่อฐานข้อมูลเท่าที่จะทำได้ สิ่งนี้ทำได้อย่างไร เนื่องจากฉันไม่ได้ให้รหัสทางกายภาพใด ๆ พร้อมกับคำถามนี้ฉันจะขอขอบคุณตรรกะ / ตัวอย่างโค้ดหรือข้อมูลบางอย่างที่สามารถชี้ให้ฉันไปในทิศทางที่จะเข้าใจปัญหาที่อธิบายไว้ข้างต้น

2
จะหลีกเลี่ยงอินเทอร์เฟซที่บ้าคลั่งใน UI ด้วยการฉีดแบบพึ่งพาได้อย่างไร
ปัญหา ฉันเพิ่งอ่านมากเกี่ยวกับ Singletons ไม่ดีและวิธีการฉีดพึ่งพา (ซึ่งฉันเข้าใจว่าเป็น "ใช้อินเตอร์เฟส") ดีกว่า เมื่อฉันใช้ส่วนนี้กับ callbacks / interfaces / DI และปฏิบัติตามหลักการแยกส่วนติดต่อฉันสิ้นสุดค่อนข้างยุ่งเหยิง การพึ่งพาของพาเรนต์ UI ที่โดยทั่วไปแล้วพวกเด็ก ๆ ทั้งหมดรวมกันดังนั้นยิ่งลำดับชั้นขององค์ประกอบ UI มากขึ้นเท่าใดคอนสตรัคเตอร์ก็ยิ่งบวมมากขึ้นเท่านั้น ทางด้านบนของลำดับชั้น UI นั้นเป็นคลาสแอปพลิเคชันเก็บข้อมูลเกี่ยวกับการเลือกปัจจุบันและการอ้างอิงถึงโมเดล 3 มิติที่ต้องการสะท้อนการเปลี่ยนแปลง แอปพลิเคชั่นคลาสใช้งานอินเทอร์เฟซ 8 ตัวและนี่เป็นเพียงหนึ่งในห้าของผลิตภัณฑ์ (/ อินเตอร์เฟส) ที่จะเกิดขึ้น! ฉันทำงานกับ singleton ที่ถือการเลือกปัจจุบันและองค์ประกอบ UI ที่มีฟังก์ชั่นเพื่อปรับปรุงตัวเอง ฟังก์ชั่นนี้จะแยกส่วนทรี UI และองค์ประกอบ UI จากนั้นเข้าถึงซิงเกิลที่เลือกปัจจุบันตามต้องการ รหัสดูเหมือนจะสะอาดกว่าสำหรับฉันด้วยวิธีนี้ คำถาม โครงการนี้น่าจะเหมาะสำหรับโครงการนี้หรือไม่ ถ้าไม่มีข้อบกพร่องพื้นฐานในการคิดและ / หรือการนำ DI มาใช้ซึ่งทำให้ยุ่งยาก …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.