प्रोमोशनल कोड के रूप में प्रतीत होता है कुछ वास्तव में काफी जटिल उपयोग केस हो सकता है। मुख्य रूप से, यह इस तथ्य के कारण है कि एक प्रचार कोड तर्क है कि (आमतौर पर) एक या अधिक व्यावसायिक उपयोगकर्ताओं द्वारा बनाए रखा जाता है, जबकि यह डोमेन के अंदर भी होता है। यह गैर-परंपरागत है, उस अर्थ में। इसे संभालने के कई तरीके हैं, और जो मैं रेखांकित करूंगा वह सिर्फ मेरा व्यक्तिगत दृष्टिकोण होगा। ,
हम कुछ मान्यताओं, साथ ही कर सकते हैं:
- एपी romotional कोड एक प्रारंभ दिनांक
- एक प्रचार कोड एक समाप्ति तिथि
एक प्रचार कोड के आवेदन मुश्किल हो सकता है है है। उन दो परिदृश्यों पर विचार करें जिन्हें हमने परिभाषित किया है। "$ एक्स ऑफ खरीद" तुलनात्मक रूप से सरल है, क्योंकि यह एक निश्चित राशि है। "एक्स% बंद खरीद", हालांकि, अधिक जटिल है। अगर हमारे पास केवल निश्चित राशि थी, तो हम किसी भी थ्रेसहोल्ड मिलने के बाद ही कार्ट में छूट लागू कर सकते थे। प्रतिशत-आधारित छूट के साथ, यदि उपयोगकर्ता दो आइटम जोड़ना था, तो प्रचार कोड जोड़ें, और फिर कोई अन्य आइटम जोड़ें, पदोन्नति पहले ही "लागू" हो चुकी होगी।
इस वजह से, मैं व्यक्तिगत रूप से केवल एक कार्ट में एक प्रचार कोड "संलग्न" करता हूं। क्यूं कर? कारण यह है कि चेकआउट के बिंदु पर, मुझे लगता है कि ऑर्डर उत्पन्न करने के लिए एक कार्ट का उपयोग किया जा रहा है। उस समय तक, गाड़ी की सामग्री द्रव होती है।कार्ट के खिलाफ उपयोगकर्ता की कार्रवाई कार्ट के कुल मूल्य को बदलती है, साथ ही साथ कुल छूट, गैर-निश्चित छूट राशि मानती है। यह या तो छूट को अमान्य होने के रूप में भी प्रस्तुत कर सकता है, क्या उपयोगकर्ता किसी कार्ट से एक या अधिक आइटम निकाल सकता है और डिस्काउंट लागू करने के लिए कार्ट के कुल मूल्य सीमा के नीचे गिरता है।
तो, मेरे पास वास्तव में कई कमांड होंगे जो शामिल होंगे। अनिवार्य रूप से कार्ट के मूल्य को प्रभावित करने वाले किसी भी आदेश छूट राशि को बदल सकते हैं।
- गाड़ी
- में एक आइटम जोड़ें में
- बदलें कार्ट से कोई आइटम निकालें हुई वस्तुओं की मात्रा: इसके लिए मैं छूट राशि तलाश कर रहा होगा आदेशों जिसके लिए पुनर्गणना किया जाना है गाड़ी
- गाड़ी
- बदलें प्रचारक कोड गाड़ी
से जुड़ी चूंकि इन सभी के लिए एक प्रचार कोड जोड़ें operat हैं एक कार्ट के खिलाफ आयनों, मैं गाड़ी में निहित डेटा की भागीदारी के साथ ही प्रचार कोड के भीतर छूट की गणना करूँगा। यह लगता है एक प्रचार कोड की तरह एक कुल होने जा रहा है, इस पथ पर जा रहा है। इसलिए, मेरे पास कमांड हैंडलर एक डोमेन सेवा का आह्वान करेंगे जो मेरे कार्ट को उस जानकारी के साथ प्रदान कर सकता है जिसकी आवश्यकता है। वह डोमेन सेवा प्रचार कोड लोड करने जा रही है, और मैं उस गाड़ी के भीतर लाइन आइटमों में प्रवेश करने में सक्षम होने जा रहा हूं, ताकि प्रचार कोड मुझे बताए कि गणना की गई छूट क्या होगी। फिर, मैं घटना उत्पन्न करने जा रहा हूं, जिसमें समायोजित मूल्य (छूट) के साथ कार्ट का नया मूल्य शामिल है। इस पथ पर जाकर, गाड़ी के भीतर लाइन वस्तुओं के आधार पर छूट की गणना करने के लिए तर्क प्रचार कोड की ज़िम्मेदारी है।
आप इस जिम्मेदारी को कार्ट में डाल सकते हैं, इसके बजाए। व्यक्तिगत रूप से, हालांकि, मुझे लगता है कि प्रचार कोड के भीतर डोमेन तर्क का encapsulation, खुद को और अधिक समझ में आता है। मैंने उल्लेख किया था कि यह संभावना है कि आप एक गाड़ी से एक आदेश उत्पन्न करेंगे। प्रचार कोड को कुल मिलाकर, और इसमें लाइन आइटम के आधार पर छूट लागू करने के लिए तर्क शामिल है, हमारे पास एक ही सत्य है, हम लाइन आइटम के लिए छूट की गणना कैसे करते हैं - चाहे वह कार्ट या इनके मामले में हो एक आदेश की शर्तें।
अगर यह मददगार है मैं एक ब्लॉग पोस्ट जो एक ठेठ CQRS और ES आवेदन देता है और यह कैसे एक साथ फिट बैठता है। आप इसे यहां देख सकते हैं [सीक्यूआरएस + इवेंट सोर्सिंग - चरण अवलोकन द्वारा एक कदम] (http://danielwhittaker.me/2014/10/02/cqrs-step-step-guide-flow-typical-application/) – Codescribler