5

मैं डोमेन मॉडल से सेवाओं का उपयोग करने के लिए संभावनाओं की तुलना कर रहा हूं (विंडसर आईओसी कंटेनर जैसे स्थानीय घटक की प्रक्रिया में)।डोमेन ऑब्जेक्ट्स से सेवाओं तक पहुंचने के नियम

मैं इस लक्ष्य को हासिल करने के लिए 3 तरीके हैं:

  1. एक डोमेन घटना प्रकाशित कर रहा है और यह निपटने

  2. मॉडल वस्तु पर एक विधि के माध्यम से सेवा इंजेक्शन सेवा परत कोड होने

  3. मॉडल ऑब्जेक्ट में सेवा इंजेक्शन

(4। एक सेवा लोकेटर का उपयोग करना)

पहला एक बहुत ही अभिव्यक्तिपूर्ण और दोहराव पैटर्न की ओर जाता है, जो अन्यथा सरल कार्यों के लिए प्रक्रियात्मक शैली में डोमेन ईवेंट और हैंडलर बनाता है। लेकिन इसमें पर्यावरण के मॉडल का सबसे अच्छा decoupling है जिसका उपयोग यह किया जाता है (मॉडल स्वयं परिभाषित है)।

दूसरा तरीका विधियों को तर्क देता है और ऐसा लगता है कि यह encapsulation तोड़ता है (यदि मॉडल ऑब्जेक्ट की कार्रवाई अन्य सेवाओं की आवश्यकता है, तो सभी कॉलर्स को बदलना होगा)।

तीसरा वर्तमान लेनदेन के लिए आवश्यक निर्भरता को इंजेक्ट करेगा। इसके लिए किसी को भी एनएचबीर्नेट को "विस्तारित" करने की आवश्यकता है। अन्य सिफारिशों को पढ़ने के कारण मैं इस विधि से बचूंगा।

जैसा कि मैं इसे हमारे दस्तावेज़ में लिखना चाहता हूं, मुझे पाठक को यह कहने की आवश्यकता है कि किस विधि का उपयोग करना है। मैं लाइन के साथ कुछ सोच रहा हूं "यदि आप डोमेन इवेंट हैंडलर को मॉडल असेंबली में डाल देंगे तो विधि प्रोजेक्ट इंजेक्शन का उपयोग करें", लेकिन यह वास्तव में बिंदु को हिट नहीं करता है।

इस नियम के लिए सुझाव?

उत्तर

8

यदि कोई एआर (कुल रूट) किसी सेवा से कुछ डेटा की आवश्यकता है, तो डेटा को निर्भरता (सेवा नहीं) के रूप में लिया जाना चाहिए। असल में, एआर सेवा के बारे में बिल्कुल नहीं जान पाएगा।

यदि कुछ विधि में वास्तव में एक अव्यवस्था है जो कि कन्स्ट्रक्टर में इंजेक्शन देने के लिए समझ में नहीं आता है, तो इसे विधि तर्क के रूप में पास करें। मुझे नहीं लगता कि आपको सेवा पास करनी चाहिए (लेकिन यह निर्भर करता है), सीधे आवश्यक डेटा पास करें।

यदि एआर कुछ ऐसा करता है जिसके लिए सामान अपडेट करने के लिए एक सेवा की आवश्यकता होती है, तो मुझे लगता है कि संचालित संदेश जाने का तरीका है (एक घटना उत्पन्न करें)।

एनएचबेर्नेट या अन्य विवरणों के बारे में, एआर को उनके बारे में जानने की आवश्यकता नहीं है। अगर यह एक डोमेन अवधारणा नहीं है, तो उसे एआर से दूर रखें।

व्यक्तिगत रूप से, मैं एआर मॉडल करने की कोशिश करता हूं ताकि उसे सेवा की आवश्यकता न हो। यह एक परिदृश्य में कई एआर शामिल हैं, मैं एक विश्वसनीय सेवा बस के साथ डोमेन घटनाओं का उपयोग करेंगे। इसका मतलब है कि किसी भी डीबी लेनदेन सवाल से बाहर है। मैं केवल एआर के भीतर लेनदेन संबंधी सामान रखता हूं, वास्तव में एआर भंडार में, बाकी सब कुछ के लिए अंततः स्थिरता होती है।

+0

बहुत अच्छा जवाब (विशेष रूप से डेटा के साथ बिंदु उल्लेखनीय है)। मैं नियम बनाउंगा: "डोमेन ईवेंट का उपयोग करें"। हालांकि मुझे "डोमेन अवधारणाओं" सेवाओं का उपयोग करने के लिए काफी प्रक्रियात्मक और पुनरावृत्ति मिलती है, लेकिन यह कम से कम समस्याओं के साथ एक नियम है। – sanosdole