मैं मूल रूप से CQRS की अवधारणा और संबंधित अवधारणाओं के चारों ओर अपना सिर लपेटने की कोशिश कर रहा हूं ।
हालाँकि CQRS आवश्यक रूप से मैसेजिंग और ईवेंट सोर्सिंग को शामिल नहीं करता है, लेकिन यह एक अच्छा संयोजन प्रतीत होता है (जैसा कि इन अवधारणाओं को मिलाकर बहुत सारे उदाहरण / ब्लॉगपोस्ट के साथ देखा जा सकता है)
किसी चीज़ के लिए एक राज्य परिवर्तन के लिए उपयोग-मामले को देखते हुए (SO पर एक प्रश्न को अद्यतन करने के लिए कहें), क्या आप निम्न प्रवाह को सही मानेंगे (जैसा कि सर्वोत्तम व्यवहार में है)?
सिस्टम एक समग्र UpdateQuestionCommand जारी करता है जिसे छोटे आदेशों के एक जोड़े में अलग किया जा सकता है: UpdateQuestion जो कि उपयोगकर्ता के मूल रूट पर लक्षित प्रश्न सकल रूट पर लक्षित है, और UpdateUserAction (अंक गिनने के लिए आदि) पर लक्षित है। ये बिंदु-से-बिंदु संदेश का उपयोग करते हुए एसिंक्रोनस रूप से भेजे जाते हैं।
कुलमिलाकर जड़ें अपना काम करती हैं और यदि सभी आग लगने की घटनाओं पर क्रमशः प्रश्नोत्तर और UserActionUpdated हो जाते हैं, जिसमें एक घटना की दुकान के लिए आउटसोर्स किए जाने वाले राज्य होते हैं .. यदयादा को बनाए रखने के लिए, बस पूरा होने के लिए, वास्तव में यहां बिंदु नहीं है।
इन घटनाओं को प्रसारण के लिए एक पब / उप कतार में भी रखा जाता है। कोई भी ग्राहक (जिसके बीच एक या कई प्रोजेक्टर जो रीड व्यू बनाते हैं) इन घटनाओं की सदस्यता लेने के लिए स्वतंत्र हैं।
सामान्य प्रश्न: क्या यह वास्तव में सबसे अच्छा अभ्यास है, कि कमांड को पॉइंट-टू-पॉइंट (यानी: रिसीवर ज्ञात है) का संचार किया जाता है, जबकि घटनाओं को प्रसारित किया जाता है (यानी: रिसीवर अज्ञात हैं)?
उपरोक्त मानते हुए, कमांड-टू-पॉइंट की बजाय पब / उप माध्यम से प्रसारित करने की अनुमति देने का क्या फायदा / नुकसान होगा?
उदाहरण के लिए: जब सागा का उपयोग करते समय कमांड को प्रसारित करना एक समस्या हो सकती है, क्योंकि मध्यस्थता भूमिका के लिए एक गाथा को मूल जड़ों में से एक की विफलता के मामले में खेलने की आवश्यकता होती है, क्योंकि गाथा को नहीं पता है कि कौन सी समग्र जड़ों के साथ शुरू होता है। ।
दूसरी ओर, मैं लाभ (लचीलापन) देखता हूं जब प्रसारण आदेशों की अनुमति होगी।