DDDस्मृति परिवर्तन में सीक्यूएस को कैसे कार्यान्वित करें?
http://www.infoq.com/interviews/greg-young-ddd
पर ग्रेग Yound द्वारा इस वीडियो को देखे जाने मैं सोच रहा था कि कैसे आप DDD के साथ कमान-क्वेरी पृथक्करण (CQS) को लागू कर सकता है आप स्मृति परिवर्तन में है जब?
सीक्यूएस के साथ आपके पास दो भंडार हैं, एक आदेश के लिए, एक प्रश्न के लिए। साथ ही साथ दो ऑब्जेक्ट समूह, कमांड ऑब्जेक्ट्स और क्वेरी ऑब्जेक्ट्स। कमांड ऑब्जेक्ट्स में केवल विधियां हैं, और कोई गुण नहीं है जो ऑब्जेक्ट्स के आकार का पर्दाफाश कर सकता है, और स्क्रीन पर डेटा प्रदर्शित करने के लिए उपयोग नहीं किया जाना चाहिए। दूसरी तरफ क्वेरी ऑब्जेक्ट्स स्क्रीन पर डेटा प्रदर्शित करने के लिए उपयोग किया जाता है।
वीडियो में आदेश हमेशा डेटाबेस पर जाते हैं, और इसलिए आप अद्यतन डेटा लाने और स्क्रीन पर फिर से चलाने के लिए क्वेरी भंडार का उपयोग कर सकते हैं।
क्या आप एएसपी.नेट में स्क्रीन की तरह कुछ संपादित करने और संपादित करने के साथ सीक्यूएस का उपयोग कर सकते हैं, जहां मेमोरी में बदलाव किए जाते हैं और डेटाबेस में परिवर्तनों को जारी रखने से पहले स्क्रीन को कई बार अद्यतन करने की आवश्यकता होती है?
उदाहरण के लिए
- मैं क्वेरी रिपोजिटरी से एक प्रश्न वस्तु लाने के लिए और स्क्रीन पर प्रदर्शित
- मैं संपादित करें पर क्लिक
- मैं क्वेरी वस्तु भंडार से एक प्रश्न वस्तु को फिर से लाएं और पर प्रदर्शित संपादन मोड
- मैं फॉर्म पर एक मान बदलता हूं, जो ऑटोपॉस्ट वापस करता है और कमांड ऑब्जेक्ट लाता है और प्रासंगिक कमांड
- क्या करना है: मुझे अब अपडेट को प्रदर्शित करने की आवश्यकता है टेड ऑब्जेक्ट कमांड ने गणना की गई फ़ील्ड में बदलाव किए हैं। चूंकि कमांड ऑब्जेक्ट को डेटाबेस में सहेजा नहीं गया है, इसलिए मैं क्वेरी रिपॉजिटरी का उपयोग नहीं कर सकता। और सीक्यूएस के साथ मैं स्क्रीन पर प्रदर्शित करने के लिए कमांड ऑब्जेक्ट के आकार का पर्दाफाश करने के लिए नहीं हूं। स्क्रीन पर प्रदर्शित होने वाले अपडेट किए गए परिवर्तनों के साथ आप क्वेरी ऑब्जेक्ट को वापस कैसे प्राप्त करेंगे।
कुछ संभावित समाधान जो मैं सोच सकता हूं, एक सत्र भंडार, या कमांड ऑब्जेक्ट से क्वेरी ऑब्जेक्ट प्राप्त करने का एक तरीका है। या सीक्यूएस इस प्रकार के परिदृश्य पर लागू नहीं होता है?
ऐसा लगता है कि वीडियो में परिवर्तन सीधे डेटाबेस तक जारी रहेगा, और मुझे सीक्यूएस के साथ डीडीडी का एक उदाहरण नहीं मिला है जो डोमेन ऑब्जेक्ट में बैचिंग परिवर्तनों के मुद्दे को संबोधित करता है और दृश्य को अपडेट करता है अंततः डोमेन ऑब्जेक्ट को सहेजने के लिए कमांड जारी करने से पहले संशोधित डोमेन ऑब्जेक्ट।
उत्तर के लिए धन्यवाद। मैं सोच रहा हूं कि डेटाबेस में सीधे बने रहने के बजाय, स्मृति में परिवर्तन होने पर सीक्यूएस का उपयोग करने के लिए यह कितना आम/अच्छा है? यह मूल रूप से हमने सत्र रिपॉजिटरीज़ का उपयोग करने के लिए किया है ताकि क्वेरी रिपोजिटरी को सत्र चर के माध्यम से कमांड डेटा तक पहुंचने की अनुमति मिल सके। शायद बाद में HttpContext रिपॉजिटरीज़ की आवश्यकता है। क्या किसी ने इसे पहले लागू किया है? विचारों की सराहना की। – Ian
मेरी राय में, डेटा स्रोत में हेरफेर करने के लिए उपयोग की जाने वाली विधि को डेटा स्रोत के प्रकार पर भरोसा नहीं करना चाहिए। रिपोजिटरी पैटर्न आपको इन मतभेदों को दूर करने की इजाजत देता है, जिससे आप किसी भी डेटा स्रोत का इलाज कर सकते हैं जैसे कि यह ऑब्जेक्ट्स का एक क्वेरी करने योग्य संग्रह था।लक्ष्य डेटा स्रोत निर्धारित करने के लिए यह व्यक्तिगत भंडार कार्यान्वयन पर निर्भर करता है - इसलिए सिद्धांत में आपके पास 'इनमेमरी रिपोजिटरी' और 'डेटाबेस रिपोजिटरी' होगा - या आप क्या हैं। –
हाँ मैं समझता हूं कि आप डाटाबेस रिपोजिटरी के लिए इनमेमरी रिपोजिटरी को स्वैप कर सकते हैं। सीक्यूएस के मूल्य का हिस्सा यह है कि आप डेटाबेस को कमांड जारी करते हैं, और अलग-अलग डेटा को क्वेरी रिपोजिटरी के साथ वापस खींचते हैं। स्मृति में कमांड ऑब्जेक्ट सत्र में होता है, इसलिए क्वेरी रिपॉजिटरी केवल कमांड ऑब्जेक्ट में डेटा खींच सकता है। डेटाबेस संस्करण के साथ क्वेरी ऑब्जेक्ट कमांड ऑब्जेक्ट के लिए पूरी तरह से अलग हो सकता है, बस स्मृति सीक्यूएस के साथ लगता है कि रिश्ते बहुत करीब है। यह आश्चर्यजनक है कि सीक्यूएस – Ian