2010-03-29 3 views
6


संस्करण अपने घटनाओं में परिवर्तन आपको लगता है कि घटना का एक नया संस्करण बन जाएगा, और पुराने लोगों रखें। ईवेंट के सभी संस्करणों को संभालने के साथ अपने डोमेन कोड फॉर्म को फूलाए रखने के लिए आप मूल रूप से एक घटक पेश करेंगे जो आपके ईवेंट को पिछले संस्करणों से नए संस्करणों में परिवर्तित करता है, और फिर उन्हें डोमेन पर लागू करता है। याद रखें कि घटनाएं ऐसी चीजें हैं जो वास्तव में आपके डोमेन में हुईं, इसलिए ज्यादातर मामलों में बहिष्कृत घटनाओं में जानकारी मूल्यवान होती है।CQRS घटना वर्ज़निंग

मुझे अभी भी इसका कोई उदाहरण नहीं मिला है।

कोई मदद?

उत्तर

3

ईवेंट रूपांतरणों को संभालने के दो मुख्य तरीके हैं। दोनों घटना अक्रमांकन के दौरान भी हो:

  1. आप संस्करण संख्या (SomethingHappened, SomethingHappened2, SomethingHappened3) के साथ नए वर्गों जोड़ सकते हैं। Deserializer कक्षा को instanciate और populate, इसे एक उच्च घटना में एक ही घटना प्राप्त करने के लिए एक कनवर्टर को पास, यहाँ SomethingHappened3। समस्या में से एक यह है कि आपको घटना के अंतिम संस्करण का उपयोग करने के लिए ईवेंट हैंडलर भी अपडेट करना होगा। इसे कम करने के लिए, आप एक ऐसे सम्मेलन का उपयोग कर सकते हैं जो SomethingHappened हमेशा अंतिम संस्करण है। V2 पर जाने पर, SomethingHappened1 के रूप में कुछ ऐसा नाम बदलें और कुछ ऐसा बनाएं जो v2 होगा। ऐसा करने के लिए आपको धारावाहिक घटना से बनाए गए वर्गों पर नियंत्रण रखना होगा क्योंकि धारावाहिक श्रेणी के नाम में संस्करण संख्या नहीं होगी, आपको इसे एक तरफ स्टोर करना चाहिए।

  2. इसके बजाय अपने कोड में कक्षाओं के हर संस्करण में रखते हुए, कनवर्टर (एक XML दस्तावेज या JSON वस्तु की तरह, एक पेड़) एक दस्तावेज़ प्राप्त होगा और यह पिछले संस्करण बनाने के लिए आवश्यक जानकारी प्रदान करने के लिए संशोधित करेगा।

यह सब आपके deserialization पाइपलाइन पर आपके नियंत्रण पर निर्भर करता है।

+0

समझ में आता है। कुछ नमूना कोड देखने के लिए अच्छा होगा। क्या वहाँ कुछ है? –

+0

क्या आप डोमेन मॉडल या घटनाओं में बदलाव के कुछ उदाहरण दिखा सकते हैं और कैसे संभालें? – Khaled

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