ฉันกำลังพยายามคิดออกว่าจะใช้รีจิสตรี DIC / IoC ในการกำหนดค่าซอฟต์แวร์ของฉันและเมื่อใดที่จะใช้โรงงานพร้อมกับเหตุผลที่อยู่เบื้องหลังทั้งสองวิธี
ฉันใช้ StructureMap เป็น DI container ของฉัน (DIC) ซึ่งง่ายต่อการกำหนดค่าโดยใช้การลงทะเบียน ใน DIC จริงวัตถุที่ลงทะเบียนทั้งหมดเป็นแบบคงที่ในความรู้สึกที่ฉันไม่จำเป็นต้องเปลี่ยน / แลกเปลี่ยนการใช้งาน / อินสแตนซ์ที่รันไทม์เมื่อ DIC มีการกำหนดค่าและพวกเขาจะถูกกำหนดค่าใน DIC เป็น singletons อย่างไรก็ตามเนื่องจากซอฟต์แวร์ (SW) ของฉันจะทำงานในอุปกรณ์ต่าง ๆ ฉันจึงต้องเลือกรีจิสตรีเฉพาะอุปกรณ์ขึ้นอยู่กับอุปกรณ์ที่ SW ของฉันทำงานเพื่อกำหนดค่าฮาร์ดแวร์ให้เหมาะสม
เนื่องจากการสร้างวัตถุบางอย่างของฉันต้องอ่านในไฟล์กำหนดค่าฉันจึงใช้โรงงานเพื่อส่งคืนอินสแตนซ์เหล่านี้ไปยัง DIC เพื่อแยกการอ่านการกำหนดค่าออกจากการสร้างวัตถุ ฉันลงทะเบียนตัวรับสัญญาณจากโรงงานใน DIC สำหรับประเภทปลั๊กอินที่เกี่ยวข้อง
ตอนนี้บอกว่าฉันมีประเภทปลั๊กอินที่IMotor
มีรูปแบบที่เป็นรูปธรรมMotor1
และMotor2
ซึ่งควรได้รับการจัดการโดยโรงงาน ขณะนี้มีสองวิธีที่ฉันสามารถตัดสินใจได้ว่าจะกำหนดค่าอุปกรณ์ของฉันอย่างไร:
- ฉันผ่านข้อมูลเกี่ยวกับอุปกรณ์ที่ว่า SW กำลังทำงานอยู่บนไป
MotorFactory
และจะส่งกลับมอเตอร์ที่ถูกต้องอย่างใดอย่างหนึ่งหรือMotor1
Motor2
ในกรณีนี้ตรรกะในการตัดสินใจอยู่ภายในโรงงาน - ผมกำหนดค่าไอซีตามไปยังอุปกรณ์ที่ทำงานอยู่ในและสร้างโรงงานที่สอง
Motor1Factory
และMotor2Factory
ที่หนึ่งสร้างและอื่น ๆMotor1
Motor2
ในกรณีนี้ผมจะมีที่แตกต่างกันสำหรับรายการรีจิสทรีIMotor
ในการลงทะเบียนเฉพาะอุปกรณ์ที่ใช้อย่างใดอย่างหนึ่งหรือMotor1Factory
Motor2Factory
ตอนนี้คำถามของฉันคือ: หนึ่งในสองวิธีนี้เป็นที่นิยมและทำไม สำหรับฉันดูเหมือนว่ากรณีแรกจะไม่ตรงไปข้างหน้าและซับซ้อนเนื่องจากฉันกระจายตรรกะที่ตัดสินใจประเภทที่จะยกตัวอย่างทั่วรหัสฐาน ในกรณีที่สองฉันได้อย่างมีประสิทธิภาพคูณจำนวนโรงงานในรหัสของฉันเนื่องจากฉันจะต้องมีโรงงานสำหรับ (เกือบ) แต่ละประเภทคอนกรีต มันยิ่งทำให้ฉันสับสนมากขึ้นเมื่อมีการเพิ่มโรงงานนามธรรมลงในส่วนผสม
ดังนั้นอีกครั้ง: เมื่อใดฉันจึงควรใช้วิธีหนึ่งหรือวิธีอื่น และที่สำคัญยิ่งกว่า: อะไรคือตัวบ่งชี้ที่ดีสำหรับการตัดสินใจว่าจะไปทางไหน?