मैं डोमेन मॉडल से सेवाओं का उपयोग करने के लिए संभावनाओं की तुलना कर रहा हूं (विंडसर आईओसी कंटेनर जैसे स्थानीय घटक की प्रक्रिया में)।डोमेन ऑब्जेक्ट्स से सेवाओं तक पहुंचने के नियम
मैं इस लक्ष्य को हासिल करने के लिए 3 तरीके हैं:
एक डोमेन घटना प्रकाशित कर रहा है और यह निपटने
मॉडल वस्तु पर एक विधि के माध्यम से सेवा इंजेक्शन सेवा परत कोड होने
मॉडल ऑब्जेक्ट में सेवा इंजेक्शन
(4। एक सेवा लोकेटर का उपयोग करना)
पहला एक बहुत ही अभिव्यक्तिपूर्ण और दोहराव पैटर्न की ओर जाता है, जो अन्यथा सरल कार्यों के लिए प्रक्रियात्मक शैली में डोमेन ईवेंट और हैंडलर बनाता है। लेकिन इसमें पर्यावरण के मॉडल का सबसे अच्छा decoupling है जिसका उपयोग यह किया जाता है (मॉडल स्वयं परिभाषित है)।
दूसरा तरीका विधियों को तर्क देता है और ऐसा लगता है कि यह encapsulation तोड़ता है (यदि मॉडल ऑब्जेक्ट की कार्रवाई अन्य सेवाओं की आवश्यकता है, तो सभी कॉलर्स को बदलना होगा)।
तीसरा वर्तमान लेनदेन के लिए आवश्यक निर्भरता को इंजेक्ट करेगा। इसके लिए किसी को भी एनएचबीर्नेट को "विस्तारित" करने की आवश्यकता है। अन्य सिफारिशों को पढ़ने के कारण मैं इस विधि से बचूंगा।
जैसा कि मैं इसे हमारे दस्तावेज़ में लिखना चाहता हूं, मुझे पाठक को यह कहने की आवश्यकता है कि किस विधि का उपयोग करना है। मैं लाइन के साथ कुछ सोच रहा हूं "यदि आप डोमेन इवेंट हैंडलर को मॉडल असेंबली में डाल देंगे तो विधि प्रोजेक्ट इंजेक्शन का उपयोग करें", लेकिन यह वास्तव में बिंदु को हिट नहीं करता है।
इस नियम के लिए सुझाव?
बहुत अच्छा जवाब (विशेष रूप से डेटा के साथ बिंदु उल्लेखनीय है)। मैं नियम बनाउंगा: "डोमेन ईवेंट का उपयोग करें"। हालांकि मुझे "डोमेन अवधारणाओं" सेवाओं का उपयोग करने के लिए काफी प्रक्रियात्मक और पुनरावृत्ति मिलती है, लेकिन यह कम से कम समस्याओं के साथ एक नियम है। – sanosdole