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