2012-08-31 21 views
5

जैसा कि मैं समझता हूं कि सीक्यूआरएस वकील डोमेन मॉडलों से पढ़ने वाले मॉडलों को अलग करते हैं और प्रत्येक आवश्यक डोमेन मॉडल प्रोजेक्शन के लिए एक विशेष पठन मॉडल रखते हैं।सीक्यूआरएस: मांग पर निर्मित मॉडल पढ़ें?

उपयोग बिंदु से, कैसे पढ़ा गया मॉडल संग्रहीत किया जाता है और पुनर्प्राप्त किया जाना चाहिए पारदर्शी होना चाहिए - आप एक प्रश्न जारी करते हैं और इसे कैसे बनाया जाता है इस पर ध्यान दिए बिना एक पढ़ा मॉडल प्राप्त करें।

कई उदाहरण और लेख पढ़ने मॉडल को संग्रहीत करने और डोमेन मॉडल परिवर्तनों के जवाब में उन्हें फिर से उत्पन्न करने के लिए अलग-अलग तालिकाओं का उपयोग करते हैं।

मैं वास्तव में करते हैं, क्योंकि निम्न कारणों से इस दृष्टिकोण की तरह:

  • सभी संभव पढ़ने मॉडल अक्सर की आवश्यकता होगी नहीं है;
  • आवश्यकता परिवर्तन मौजूदा पढ़ने वाले मॉडल को अमान्य कर सकता है, इसलिए उन सभी को पुन: उत्पन्न करने की आवश्यकता होगी;
  • अगर किसी कारण से मॉडल में ऐसे गुण होते हैं जिन्हें पीढ़ी पर संग्रहीत नहीं किया जा सकता है लेकिन गणना की आवश्यकता है तो आपको संग्रहित प्रक्रियाओं/कार्यों/विचारों का उपयोग करने के लिए मजबूर होना पड़ता है;
  • चूंकि पढ़ने के मॉडल डोमेन मॉडल से अलग हैं, यदि डोमेन मॉडल परिवर्तन पर एप्लिकेशन-स्तरीय कैशिंग का उपयोग किया जाता है तो आपको उन सभी अनुप्रयोगों को सूचित करने की आवश्यकता होती है जिन्हें पुराने पढ़ने वाले मॉडलों को कैश से निकाला जाना आवश्यक है;
  • कभी-कभी जटिल ऑब्जेक्ट ग्राफ़ को पूरी तरह से असंभव करने के लिए यह संभव नहीं है और न ही वांछनीय है, इसलिए आपको विशेष डोमेन इकाई संस्करण के लिए सुसंगत मॉडल पढ़ने की आवश्यकता है, जिसे उन्हें उसी लेनदेन में उत्पन्न करने की आवश्यकता है;
  • कुछ डोमेन इकाइयों में गुण होते हैं जो अक्सर बदलते हैं लेकिन प्रत्येक पढ़ने वाले मॉडल में शामिल होने की आवश्यकता होती है।

इस मैं क्वेरी सेवाओं होने की सोच रहा हूँ के आधार पर कार्य करना चाहिए:

  • पढ़ने मॉडल अक्सर उत्पन्न करने की आवश्यकता है कि और/या डोमेन संस्थाओं की सरल अनुमानों हैं: उन्हें संगृहीत नहीं करते हैं, लेकिन उन्हें उत्पादन डेटाबेस में डोमेन मॉडल इकाइयों से पूछताछ करके ओआरएम के माध्यम से;
  • उन मॉडलों के लिए जिन्हें अक्सर उत्पन्न करने की आवश्यकता नहीं होती है और जटिल डोमेन इकाई अनुमान उन्हें उत्पन्न करते हैं और डेटाबेस टेबल में स्टोर करते हैं।

इसके अलावा मुझे लगता है कि कुछ लोग ब्लॉब्स के रूप में पढ़ने वाले मॉडलों को संग्रहीत करने का सुझाव देते हैं। ब्लॉब्स के रूप में पढ़ने वाले मॉडलों को संग्रहीत करने में समस्या यह है कि यदि आपको उन पर खोज करने की आवश्यकता होगी तो आपको अनुक्रमण के लिए गुण निकालने की आवश्यकता होगी और यदि आपको पूर्ण पाठ खोज की आवश्यकता है तो भी आपको उन्हें एक प्रारूप में स्टोर करना होगा जिसे पूर्ण पाठ द्वारा समझा जा सकता है उपकरण।

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

उत्तर

11

CQRS की आवश्यकता नहीं है कि पढ़ने के लिए मॉडल (यदि आप एक दस्तावेज़ डेटाबेस का उपयोग करें या दस्तावेज) अलग तालिकाओं में संग्रहीत किया जाता है, हालांकि यह अक्सर एक अच्छा तरीका है और घटना सोर्सिंग के साथ संयोजन में अच्छी तरह से काम करता है।एक पढ़ा गया मॉडल उदाहरण के लिए डेटाबेस दृश्य या ORM क्वेरी द्वारा समर्थित किया जा सकता है।

विरासत प्रणाली के कुछ हिस्सों में सीक्यूआरएस शुरू करते समय यह एक अच्छा दृष्टिकोण हो सकता है।

जिस दृष्टिकोण का आप यहां सुझाव दे रहे हैं, उससे पहले सुझाव दिया गया है, उदाहरण के लिए this post by Ayende देखें; मुझे लगता है कि इसे "पतली पढ़ा मॉडल" या इसी तरह कहा जाता है। मैं कहूंगा कि इसके लिए जाओ।

आप

  • Jimmy Bogard's article on myths in CQRS पढ़ने में रुचि हो सकती है।
  • आयुन्डे की "आपकी अवशेषों को सीमित करें" पदों की श्रृंखला, starting here