เป็นไปได้หรือไม่ที่จะใช้ IoC และ Rich Domain เป็นตัวอย่างที่ดีของพวกเขาโครงการโอเพนซอร์สที่ทำเช่นนั้น?
ฉันถือว่าคุณหมายถึง DI แทน IoC และโครงการที่คุณทำงานใช้ DI container เช่น Spring IoC มีสองรสชาติหลัก: รูปแบบ DI และตัวระบุตำแหน่ง ฉันไม่เห็นว่าทำไมรูปแบบตัวระบุตำแหน่งควรเป็นปัญหาดังนั้นให้มุ่งเน้นที่ DI
ฉันไม่คิดว่ามันเป็นไปได้หรืออย่างน้อยก็อาจเป็นสิ่งที่ทำไม่ได้ ลักษณะสำคัญของภาชนะ DI คือพวกมันควบคุมการสร้างวัตถุเมื่อพวกมันฉีดเข้าไปในสิ่งอื่น ("วัตถุที่ได้รับการจัดการ") ชุดของวัตถุที่ได้รับการจัดการที่ยังมีชีวิตอยู่เมื่อโครงการทำงานเป็นอิสระจากรายการโดเมนที่มีอยู่ในโครงการของคุณ แต่ขึ้นอยู่กับว่าวัตถุมีสายและขอบเขตใด (singleton, prototype) ที่กำหนดให้กับพวกเขา
นี่คือเหตุผลที่คุณไม่ต้องการให้ DI container จัดการวัตถุโดเมนของคุณ แต่ถ้าคุณสร้างวัตถุด้วยตนเอง (ใหม่) คุณจะไม่สามารถฉีดวัตถุอื่น ๆ ไปยังวัตถุโดเมนของคุณได้ (การทิ้งงานที่เป็นไปได้ด้วยการเดินสายไฟด้วยตนเอง) เนื่องจากคุณต้องการการฉีดเหล่านี้เพื่อแทนที่การใช้งานกับผู้อื่นคุณจึงไม่สามารถแทนที่การทำงานของวัตถุโดเมนที่หลากหลายโดยใช้ DI ดังนั้นคุณจะไม่ต้องการวางฟังก์ชันการทำงานลงในวัตถุโดเมนหรือคุณจะสูญเสียคุณสมบัติของ DI
ฉันไม่เห็นว่าคอนเทนเนอร์ DI สมมุติสามารถทำงานได้ที่ไม่จัดการวัตถุของคุณและการใช้งานที่มีอยู่ไม่อนุญาต ดังนั้นจึงยุติธรรมที่จะอ้างว่า DI อาศัยการจัดการวัตถุ ดังนั้นจะเป็นการล่อลวงให้คุณแบ่งวัตถุ Rich Domain ที่มีศักยภาพออกเป็นคลาส anemic หนึ่งคลาสและหนึ่งหรือหลายคลาสสคริปต์ธุรกรรม