สมมติว่าเรามีลูกค้า 1001 รายที่สร้างการพึ่งพาโดยตรงแทนที่จะยอมรับการฉีด Refactoring the 1001 ไม่ใช่ตัวเลือกตามที่เจ้านายของเรา จริงๆแล้วเราไม่ได้รับอนุญาตให้เข้าถึงแหล่งข้อมูลของพวกเขาเพียงแค่ไฟล์คลาส
สิ่งที่เราควรจะทำคือ "ปรับปรุง" ระบบที่ลูกค้า 1001 เหล่านี้ผ่านให้ได้ เราสามารถ refactor ที่เราชอบ การพึ่งพาเป็นส่วนหนึ่งของระบบนั้น และการพึ่งพาเหล่านั้นบางอย่างเราควรเปลี่ยนไปใช้การติดตั้งใหม่
สิ่งที่เราต้องการจะทำคือมีความสามารถในการกำหนดค่าการใช้งานที่แตกต่างกันของการอ้างอิงเพื่อตอบสนองลูกค้าจำนวนมากนี้ น่าเสียดายที่ DI ไม่ได้ดูตัวเลือกเนื่องจากลูกค้าไม่ยอมรับการฉีดด้วยตัวสร้างหรือผู้ตั้งค่า
ตัวเลือก:
1) Refactor การปรับใช้บริการที่ลูกค้าใช้เพื่อให้เป็นไปตามที่ลูกค้าต้องการ ปังเราเสร็จแล้ว ไม่ยืดหยุ่น ไม่ซับซ้อน
2) ปรับโครงสร้างการนำไปใช้ใหม่เพื่อให้ผู้รับมอบสิทธิ์สามารถทำงานให้กับการพึ่งพาอื่นที่ได้มาจากโรงงาน ตอนนี้เราสามารถควบคุมว่าการใช้งานแบบใดที่พวกเขาใช้โดยการปรับโครงสร้างโรงงานอีกครั้ง
3) ปรับโครงสร้างการนำไปใช้ใหม่เพื่อให้ผู้รับมอบสิทธิ์สามารถทำงานได้กับการพึ่งพาอื่นที่ได้รับผ่านตัวระบุบริการ ตอนนี้เราสามารถควบคุมได้ว่าการใช้งานใดที่พวกเขาใช้โดยการกำหนดค่าบริการตัวระบุตำแหน่งซึ่งอาจเป็นhashmap
สตริงของวัตถุที่มีการแคสต์เล็กน้อย
4) บางสิ่งที่ฉันยังไม่ได้คิดเลย
วัตถุประสงค์:
ลดความเสียหายที่เกิดจากการออกแบบโดยการลากรหัสลูกค้าเก่าที่ออกแบบมาไม่ดีในอนาคตโดยไม่เพิ่มความซับซ้อนที่ไม่มีจุดหมาย
ลูกค้าไม่ควรจะรู้หรือควบคุมการดำเนินงานของการอ้างอิงของพวกเขา new
แต่พวกเขายืนยันในการสร้างพวกเขาด้วย เราไม่สามารถควบคุมได้new
แต่เราควบคุมชั้นเรียนที่พวกเขากำลังสร้าง
คำถามของฉัน:
ฉันไม่ได้พิจารณาอะไร
คุณต้องการความเป็นไปได้ที่จะกำหนดค่าระหว่างการใช้งานที่แตกต่างกันหรือไม่? เพื่อจุดประสงค์อะไร?
ความว่องไว ไม่ทราบจำนวนมาก ฝ่ายบริหารต้องการโอกาสในการเปลี่ยนแปลง สูญเสียการพึ่งพาโลกภายนอกเท่านั้น ยังทดสอบ
คุณต้องการกลศาสตร์เวลาทำงานหรือเพียงแค่กลไกการรวบรวมเวลาเพื่อสลับระหว่างการใช้งานที่แตกต่างกัน? ทำไม?
กลไกการรวบรวมเวลาน่าจะเพียงพอ ยกเว้นการทดสอบ
คุณต้องการสลับการใช้งานแบบใด ทุกอย่างในครั้งเดียว? ต่อโมดูล (แต่ละอันมีกลุ่มของชั้นเรียน) ต่อชั้น?
จาก 1001 มีเพียงหนึ่งเดียวเท่านั้นที่ถูกเรียกใช้ผ่านระบบได้ตลอดเวลา การเปลี่ยนสิ่งที่ลูกค้าทั้งหมดใช้ในครั้งเดียวอาจเป็นเรื่องปกติ การควบคุมการพึ่งพาเป็นรายบุคคลนั้นมีความสำคัญ
ใครต้องการควบคุมสวิตช์ เฉพาะ / ทีมนักพัฒนาของคุณ? ผู้ดูแลระบบ? ลูกค้าแต่ละคนด้วยตัวเขาเอง? หรือนักพัฒนาการบำรุงรักษาสำหรับรหัสของลูกค้าหรือไม่ ดังนั้นกลศาสตร์ที่ง่าย / ทนทาน / เข้าใจผิดต้องเป็นอย่างไร?
Dev สำหรับการทดสอบ ผู้ดูแลระบบเนื่องจากการเปลี่ยนแปลงการพึ่งพาฮาร์ดแวร์ภายนอก มันจะต้องง่ายต่อการทดสอบและกำหนดค่า
เป้าหมายของเราคือการแสดงให้เห็นว่าระบบสามารถเหล็กไหลได้อย่างรวดเร็วและทันสมัย
กรณีการใช้งานจริงสำหรับสวิตช์การใช้งาน?
หนึ่งคือข้อมูลบางส่วนจะถูกจัดเตรียมโดยซอฟต์แวร์จนกว่าโซลูชันฮาร์ดแวร์จะพร้อมใช้งาน