क्या IoC और रिच डोमेन का उपयोग करना संभव है? क्या उनके कोई अच्छे उदाहरण हैं, ओपन सोर्स प्रोजेक्ट जो ऐसा करते हैं?
मुझे लगता है कि आप Io के बजाय DI का मतलब है, और जिस परियोजना पर आपने काम किया है वह स्प्रिंग जैसे DI कंटेनर का उपयोग करती है। IoC के दो मुख्य स्वाद हैं: DI और लोकेटर पैटर्न। मैं यह नहीं देखता कि लोकेटर पैटर्न की समस्या क्यों होनी चाहिए, इसलिए आइए DI पर ध्यान केंद्रित करें।
मुझे नहीं लगता कि यह संभव है, या कम से कम बहुत ही अव्यवहारिक होगा। डीआई कंटेनरों का मुख्य पहलू यह है कि वे वस्तुओं के निर्माण को नियंत्रित करते हैं जब वे उन्हें दूसरों ("प्रबंधित वस्तुओं") में इंजेक्ट करते हैं। प्रबंधित वस्तुओं का सेट जो जीवित है, जब परियोजनाएं चलती हैं, तो वह स्वतंत्र होती है, जिसमें से डोमेन आइटम आपके प्रोजेक्ट में मौजूद होते हैं, लेकिन यह निर्भर करता है कि ऑब्जेक्ट कैसे वायर्ड होते हैं और कौन से स्कोप्स (सिंगलटन, प्रोटोटाइप) उन्हें सौंपे जाते हैं।
यही कारण है कि आप DI कंटेनर को अपने डोमेन ऑब्जेक्ट का प्रबंधन नहीं करने देना चाहते हैं। लेकिन यदि आप मैन्युअल रूप से (नए के साथ) ऑब्जेक्ट बनाते हैं, तो आप अपने डोमेन ऑब्जेक्ट में अन्य ऑब्जेक्ट इंजेक्ट नहीं कर सकते। (संभावित वर्क-अराउंड्स को मैन्युअल वायरिंग को एक तरफ छोड़कर।) चूंकि आपको इन इंजेक्शन को दूसरों के साथ कार्यान्वयन को बदलने की आवश्यकता है, इसलिए आप डीआई का उपयोग करके समृद्ध डोमेन ऑब्जेक्ट की कार्यक्षमता को प्रतिस्थापित नहीं कर सकते। इसलिए, आप डोमेन ऑब्जेक्ट्स में कार्यक्षमता नहीं रखना चाहेंगे, या आप DI की सुविधाओं को खो देंगे।
मैं यह नहीं देखता कि एक काल्पनिक डीआई कंटेनर कैसे काम कर सकता है जो आपकी वस्तुओं का प्रबंधन नहीं करता है, और मौजूदा कार्यान्वयन में से कोई भी इसकी अनुमति नहीं देता है। इसलिए यह दावा करना उचित है कि DI वस्तुओं के प्रबंधन पर निर्भर है। इसलिए यह आपको संभावित रिच डोमेन ऑब्जेक्ट को एक एनीमिक क्लास और एक या कई ट्रांजेक्शन स्क्रिप्ट कक्षाओं में विभाजित करने के लिए हमेशा लुभाएगा।