2015-09-28 7 views
5

कृपया बताएं कि सीक्यूआरएस, ईएस और डीडीडी करते समय एक ही समय में कई समेकन को संशोधित करना एक बुरा विचार है। क्या ऐसी कोई परिस्थिति है जहां यह अभी भी ठीक हो सकती है?आदेशों और घटनाओं को एक साथ सीमित क्यों करें? सीक्यूआरएस + ईएस + डीडीडी

उदाहरण के लिए PurgeAllCompletedTodos जैसे कमांड लें। मैं यह आदेश एक घटना का नेतृत्व करना चाहता हूं जो IsActive को गलत पर सेट करके प्रत्येक पूर्ण टोडो-योग की स्थिति को अद्यतन करता है।

यह अच्छा क्यों नहीं है?

एक कारण यह है कि मैं के बारे में सोच सकता है:

डोमेन राज्य अपडेट करते समय यह शायद पूरे राज्य की एक अच्छी तरह से परिभाषित हिस्से के लिए लेन-देन सीमित करने के लिए अच्छा है, ताकि केवल इस हिस्से अद्यतन के दौरान बंद कर दिया लिखने की जरूरत है। ऐसा करने से कई अलग-अलग योगों पर समानांतर में लिखने की अनुमति मिल जाएगी जो कुछ बेहद भारी परिदृश्यों में प्रदर्शन को बढ़ावा दे सकती हैं।

+0

"एक घटना * नहीं * किसी भी डोमेन राज्य में सभी को अपडेट कर सकते हैं?" और "आदेशों और घटनाओं को 1 कुल तक सीमित क्यों करें?" मुझे दो अलग, असंबंधित प्रश्नों की तरह लग रहा है। – guillaume31

+0

हाँ आप सही हैं। मैं सवाल संशोधित करूंगा। –

+0

मैंने अपने प्रश्न का दूसरा हिस्सा यहां स्थानांतरित कर दिया है: http://stackoverflow.com/questions/32823747/in-es-cqrs-ddd-can-a-event-not-update-any-real-domain-state- बिल्कुल –

उत्तर

9

प्रश्न की प्रतिक्रिया "कुल" के अर्थ में है।

पहली बात यह है कि मैं कहूंगा कि आप 'एन' योग को संशोधित नहीं कर रहे हैं, लेकिन आप 'एन' इकाइयों को संशोधित कर रहे हैं।

एक समग्र और अधिक से अधिक एक इकाई होता है और जब आप transactionally अपने आवेदन में एक से अधिक इकाई की स्थिति संशोधित करने के लिए (सभी की जरूरत है कि यह सिर्फ एक लेनदेन अवधारणा, कुल (पैटर्न) प्रयोग किया जाता है संशोधित या कोई नहीं हैं)।

अब, आप एक आदेश के साथ एक से अधिक कुल संशोधित क्यों करेंगे?

यदि आपको कुछ और करने से पहले यह आवश्यकताएं महसूस होती हैं, तो यह देखने के लिए अपनी समग्र सीमाओं की जांच करें कि क्या आप इसे 1 कमांड -> 'एन' योग की आवश्यकताओं को हटाने के लिए संशोधित कर सकते हैं या नहीं।

कर सकते हैं एक कुल तो अपने आदेश के लिए PurgeAllCompletedTodos, आप भी के बारे में सोचने के लिए एक एकल तोदो से लेन-देन की सीमा एक समग्र UserTodosAggregate का विस्तार कर सकता है, एक ही प्रकार के संस्थाओं का एक बहुत कुछ शामिल है कि शामिल सभी उपयोगकर्ता todos, और इसे एक ही उपयोगकर्ता के टोडोस के लिए सभी आदेशों को प्रबंधित करने दें।
इस तरह आप एक ही लेनदेन में किसी उपयोगकर्ता के सभी टोडो को संशोधित कर सकते हैं।

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

क्या होगा यदि मुझे कुछ इकाइयों को संशोधित करने की आवश्यकता है और उन्हें एक समग्र में नहीं मिल सकता है?

पिछले ने कहा, एक आदेश जो एक से अधिक योग को संशोधित करता है लेनदेन की वजह से खराब है। क्या होगा यदि आप 3 कुल संशोधित करते हैं, तो पहला अच्छा होता है, और फिर सर्वर बंद हो जाता है?

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

एक समग्र अभी भी यह खुद आदेश है प्राप्त करते हैं, लेकिन इस प्रक्रिया प्रबंधक प्रभार में है जो उन्हें इस तरह यह जानता है में भेजने के लिए (समय में एक, समानांतर में सभी, 5 समय के अनुसार, क्या करते हैं-यू-अभाव)
तो आपके पास दो लेनदेन के बीच विफलता का प्रबंधन करने की रणनीति हो सकती है, और निर्णय लेना चाहिए: "अगर कुछ विफल हो जाता है, तो अब तक किए गए सभी संशोधन को वापस रोल करें" (प्रत्येक योग को रोलबैक कमांड भेजना), या "यदि कोई ऑपरेशन दोहराना विफल हो जाता है यह प्रत्येक 30 मिनट में 3 बार और यदि काम नहीं करता है तो रोलबैक "," अगर कुछ सिस्टम सिस्टम एडमिनिस्ट्रेशन के लिए अधिसूचना उत्पन्न करता है "।

(लंबी पोस्ट के लिए खेद है, कम से कम यह मदद करता है उम्मीद है)

+0

ग्रेट स्पष्टीकरण। बहुत अच्छी तरह से समझाया। धन्यवाद! – Chris

संबंधित मुद्दे

 संबंधित मुद्दे