DDD: डोमेन ईवेंट हैंडलर कहां रखें?


13

क्या आप मुझे अपनी राय बता सकते हैं कि DDD में डोमेन इवेंट हैंडलर लगाने के लिए कौन सी परत सही है? उदाहरण के लिए, मेरे पास एक नया अनुबंध जोड़ने के लिए आवेदन सेवा है और मैं संपर्क व्यक्ति को एक ईमेल अधिसूचना भेजना चाहता हूं, जब अनुबंध जोड़ा गया है, तो क्या वह ईमेल प्रेषक (जो अनुबंध अनुबंधित घटना को संभालता है) अनुप्रयोग सेवा या डोमेन सेवा या कुछ और?

जवाबों:


12

मैं एप्लिकेशन लेयर में डोमेन ईवेंट हैंडलर लगाता हूं।

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


1
आवेदन परत के लिए +1। एक पब-सब डिज़ाइन में, डोमेन ईवेंट विभिन्न स्थानों / प्रणालियों / माइक्रोसॉर्क्स में जेनेरिक लॉजिक को सक्रिय कर सकता है। यदि कोई सब्सक्राइबर डीडीडी का उपयोग करके बनाया गया एप्लिकेशन है, तो ईवेंट उस एप्लिकेशन / बीसी में कुछ प्रोसेसिंग शुरू कर रहा है। इस प्रसंस्करण के लिए लेन-देन सीमांकन, अभिगम नियंत्रण, समन्वय की आवश्यकता हो सकती है जो आमतौर पर एप्लिकेशन परत पर किया जाता है।
पाउलो मर्सन

2

मूल डीडीडी पुस्तक (इवांस 2004) एक पतली परत के रूप में आवेदन परत की व्याख्या करती है जो उपयोगकर्ता की कार्रवाई के जवाब में डोमेन ऑब्जेक्ट का उपयोग करती है। डोमेन ईवेंट के लिए विशिष्ट ईवेंट हैंडलर इसलिए एप्लिकेशन लेयर में नहीं होते हैं।

जब तक आप ऊपर की निर्भरता बनाकर लेयरिंग को नहीं तोड़ेंगे, तब तक उनमें से कुछ को डोमेन लेयर में रखने का कोई मतलब हो सकता है।

यदि आपके पास एक बुनियादी ढांचा परत है जो डोमेन परत के नीचे है, तो इवेंट हैंडलर वहां नहीं हो सकता क्योंकि यह लेयरिंग को तोड़ देगा।

यदि आपके पास एक एडेप्टर परत है जो डोमेन परत के ऊपर है, तो आप वहां एक इवेंट हैंडलर बना सकते हैं। हेक्सागोनल वास्तुकला की जाँच करें ।


2

मैं डोमेन इवेंट हैंडलर को डोमेन इंटरफ़ेस के रूप में डोमेन लेयर में रखता हूँ IDomainEventHandler

एक डोमेन ईवेंट हैंडलर का एक उदाहरण एक नीति है जो एक नए लेनदेन को आरंभ करने के लिए कुछ डोमेन ईवेंट की सदस्यता लेता है (उदाहरण के लिए: नए डोमेन कमांड को ट्रिगर करने के लिए), इसलिए इसका मतलब डोमेन परत में है क्योंकि यह संबंधित है व्यापार का तर्क।

हम एक उदाहरण के बारे में सोच सकते हैं जहां एक आदेश की पुष्टि की जाती है और इसलिए एक चालान अनुरोध बनाया जाना चाहिए। हमारे पास एक घटना OrderConfirmedEventहुई है। हमारे डोमेन में एक नीति इस घटना की सदस्यता लेने और एक डोमेन कमांड बनाने के लिए RequestInvoiceहोगी जो कमांड हैंडलर द्वारा संभाला जाएगा और उसके अनुसार निपटा जाएगा।

अगर हमारे पास एप्लिकेशन लेयर में यह ईवेंट हैंडलर है, तो इसका मतलब यह होगा कि एप्लिकेशन लेयर, उपयोगकर्ता के कार्यों को ऑर्केस्ट्रेट करने के अलावा, कुछ व्यावसायिक लॉजिक को निष्पादित करेगा, जो गलत लगता है।

हालाँकि हमारे पास है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.