मैं समझता हूं कि कमांड्स को कुछ भी वापस नहीं करना चाहिए।
यह एक दृश्य है, लेकिन यह पूरी तरह से पत्थर में सेट नहीं है। HTTP में राइट्स (PUT, POST, DELETE) पर विचार करें - ये सभी संदेश कमांड हैं, इस अर्थ में कि वे अनुरोध के साथ संदेश हैं कि संसाधन स्थिति बदलते हैं, और फिर भी वे सभी प्रतिक्रियाएं देते हैं।
तो आप कमांड बस से परे एक त्रुटि को कैसे संभालते हैं? (उदाहरण के लिए, उपयोगकर्ता उसी उपयोगकर्ता नाम / ईमेल के साथ 1 सेकंड पहले पंजीकृत हुआ)।
आप कैसे जानते हैं कि कमांड विफल हो गई है, और आप त्रुटि कैसे जानते हैं?
तो ऐसे मामले में जहां आप कमांड हैंडलर के साथ सीधे संवाद कर रहे हैं, एक लौटाया गया संदेश यह स्वीकार करने के लिए पूरी तरह से उचित तरीका है कि कमांड प्राप्त और संसाधित हो गया है।
यदि आप एक बस की तरह मिडलवेयर के एक टुकड़े का उपयोग कर रहे हैं, जो आपको सीधे लक्ष्य के साथ संवाद करने से रोकता है, तो मैं आपको सुझाव दूंगा कि आप अतुल्यकालिक संदेश पैटर्न देखें - आपको संदेश भेजने के लिए कमांड हैंडलर कैसे मिलता है फोन करने वाले?
एक विचार यह है कि कमांड के परिणाम की सदस्यता लें; यह होप के एंटरप्राइज इंटीग्रेशन पैटर्न में कुछ विचारों से उधार लेता है। मूल विचार यह है कि चूंकि क्लाइंट को भेजे गए कमांड संदेश से परिचित है, इसलिए यह कमांड संदेश के परिणामस्वरूप प्रकाशित किसी भी नए संदेश की सदस्यता लेने के लिए अच्छी तरह से तैनात है। कमांड हैंडलर, डेटा को रिकॉर्ड की पुस्तक में सहेजने के बाद, घटनाओं की घोषणा करता है कि परिवर्तन सफल रहा, और ग्राहक उन घटनाओं के लिए सदस्यता लेता है - संदेश में विभिन्न पहचानकर्ताओं के संयोग पर विचार करके सही घटनाओं को पहचानना (कारण आईडी) सहसंबंध आईडी , और इसी तरह)।
वैकल्पिक दृष्टिकोण थोड़ा अधिक प्रत्यक्ष हैं। संदेश को कॉलबैक में शामिल करना होगा, जिसे संदेश को सफलतापूर्वक संभाला जाने के बाद कमांड हैंडलर द्वारा आमंत्रित किया जा सकता है।
एक बहुत ही समान विकल्प आदेश हैंडलर को पावती लिखने के लिए कमांड संदेश में स्थान आरक्षित करना है - चूंकि क्लाइंट के पास पहले से ही कमांड संदेश है, सर्किट पहले से ही पूरा हो गया है। " वादा " या " पूर्ण भविष्य" के बारे में सोचो । संदेश कमांड हैंडलर को बताता है कि पावती कहां लिखनी है; क्लाइंट को ऐसे संकेत करना (काउंटडाउन लैच) कि पावती उपलब्ध है।
और निश्चित रूप से, आपके पास मिडलवेयर को हटाने का अतिरिक्त विकल्प है जो कि बस सही काम करने के तरीके से मिल रहा है।
उदाहरण के लिए, उपयोगकर्ता ने उसी उपयोगकर्ता नाम / ईमेल के साथ 1 सेकंड पहले पंजीकृत किया था
यदि आप उपयोगकर्ता पंजीकरण को बेकार में संभाल रहे हैं, तो जरूरी नहीं कि वह त्रुटि हो - जब तक कि एक प्रतिक्रिया नहीं देखी जाती तब तक संदेशों को दोहराना कम से कम एक बार वितरण सुनिश्चित करने का एक सामान्य तरीका है।