क्या डीडीडी एग्रीगेट्स वास्तव में एक वेब अनुप्रयोग में एक अच्छा विचार है?


40

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

उदाहरण के लिए, एग्रीगेट्स की अवधारणा समझ में आती है। आप स्वामित्व के छोटे डोमेन बनाते हैं ताकि आपको संपूर्ण डोमेन मॉडल से निपटना न पड़े।

हालाँकि, जब मैं एक वेब ऐप के संदर्भ में इस बारे में सोचता हूं, तो हम अक्सर डेटा के छोटे सबसेट को वापस खींचने के लिए डेटाबेस को हिट करते हैं। उदाहरण के लिए, कोई पृष्ठ केवल आदेशों की संख्या को सूचीबद्ध कर सकता है, जिसमें लिंक पर क्लिक करके आदेश को खोल सकते हैं और इसकी ऑर्डर आईडी देख सकते हैं।

तो मैं समझ समुच्चय सही हूँ, मैं आम तौर पर एक OrderAggregate कि सदस्यों होते हैं वापस जाने के लिए भंडार पैटर्न का प्रयोग करेंगे GetAll, GetByID, Delete, और Save। हाँ यह ठीक है। परंतु...

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

क्या मैं कुछ भूल रहा हूँ? या क्या आपके द्वारा उपयोग किए जाने वाले अनुकूलन का कोई स्तर है? मैं कल्पना नहीं कर सकता कि किसी को भी जानकारी के संपूर्ण समुच्चय को वापस करने की वकालत करेंगे जब आपको इसकी आवश्यकता नहीं है।

निश्चित रूप से, कोई आपकी रिपॉजिटरी की तरह तरीके बना सकता है GetOrderHeaders, लेकिन यह पहली बार में रिपॉजिटरी जैसे पैटर्न का उपयोग करने के उद्देश्य को पराजित करता है।

क्या कोई मेरे लिए इसे स्पष्ट कर सकता है?

संपादित करें:

बहुत अधिक शोध के बाद, मुझे लगता है कि यहां डिस्कनेक्ट यह है कि एक शुद्ध रिपॉजिटरी पैटर्न इस बात से अलग है कि ज्यादातर लोग रिपोजिटरी होने के बारे में क्या सोचते हैं।

फाउलर एक भंडार को डेटा स्टोर के रूप में परिभाषित करता है जो संग्रह शब्दार्थ का उपयोग करता है, और आमतौर पर स्मृति में रखा जाता है। इसका अर्थ है संपूर्ण वस्तु ग्राफ बनाना।

इवांस ने एग्रीगेट रूट्स को शामिल करने के लिए रिपॉजिटरी को बदल दिया, और इस तरह रिपॉजिटरी केवल एक एग्रीगेट में ऑब्जेक्ट्स का समर्थन करने के लिए विवादास्पद है।

ज्यादातर लोग रिपॉजिटरी को गौरवशाली डेटा एक्सेस ऑब्जेक्ट के रूप में समझते हैं, जहां आप केवल जो भी डेटा चाहते हैं उसे प्राप्त करने के लिए तरीके बनाते हैं। यह आशय नहीं प्रतीत होता है जैसा कि फाउलर के पैटर्न इन एंटरप्राइज एप्लिकेशन आर्किटेक्चर में वर्णित है।

फिर भी अन्य लोग एक भंडार के बारे में सोचते हैं क्योंकि परीक्षण और मॉकिंग को आसान बनाने के लिए या सिस्टम के बाकी हिस्सों से दृढ़ता को कम करने के लिए मुख्य रूप से इस्तेमाल किया जाने वाला एक साधारण अमूर्त है।

मुझे लगता है कि उत्तर यह है कि यह एक बहुत अधिक जटिल अवधारणा है जितना मैंने पहले सोचा था।


4
"मुझे लगता है कि उत्तर यह है कि यह एक बहुत अधिक जटिल अवधारणा है जितना मैंने पहले सोचा था कि यह था।" यह बहुत सच है।
क्वेंटिन-स्टारिन

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

मेरा सुझाव रूट एग्रिगेट एसोसिएशनों में आलसी लोड को लागू करना है। तो आप कई वस्तुओं को लोड किए बिना जड़ों की एक सूची प्राप्त कर सकते हैं।
जूलियानो

4
लगभग 6 साल बाद, अभी भी एक अच्छा सवाल है। लाल किताब में अध्याय पढ़ने के बाद, मैं कहूंगा: अपने समुच्चय को बहुत बड़ा न बनाएं। यह आपके डोमेन से कुछ शीर्ष-स्तर की अवधारणा को लुभाने के लिए लुभा रहा है और इसे रूट टू रूल ऑल घोषित करता है, लेकिन डीडीडी कई स्वतंत्र अधिवक्ताओं की वकालत करता है। और उन अक्षमताओं को कम करता है, जिनका आप ऊपर वर्णन करते हैं।
Cpt

डोमेन के लिए प्राकृतिक और प्रभावी होने के दौरान आपके समुच्चय यथासंभव छोटे होने चाहिए (एक चुनौती!)। इसके अलावा, यह बेहद विशिष्ट तरीकों के लिए आपके रिपोज के लिए पूरी तरह से ठीक और वांछनीय है ।
तिमो

जवाबों:


30

अपने डोमेन मॉडल और क्वेरी के लिए समुच्चय का उपयोग न करें।

वास्तव में, आप जो पूछ रहे हैं, वह एक सामान्य पर्याप्त प्रश्न है कि बस से बचने के लिए सिद्धांतों और पैटर्न का एक सेट स्थापित किया गया है। इसे CQRS कहा जाता है ।


2
@Mystere आदमी: नहीं, यह है की जरूरत कम से कम डेटा उपलब्ध कराने के लिए। यह एक अलग रीड मॉडल के बड़े उद्देश्यों में से एक है। यह सामने वाले कुछ समसामयिक मुद्दों से निपटने में भी मदद करता है। DDD पर लागू होने पर CQRS के कई लाभ हैं।
क्वेंटिन-स्टारिन

2
@ मिस्टर: मुझे काफी आश्चर्य है कि यदि आप मेरे द्वारा लिंक किए गए लेख को पढ़ेंगे तो आपको याद होगा। "क्वेरी (रिपोर्टिंग)" शीर्षक वाला अनुभाग देखें: "जब कोई एप्लिकेशन डेटा का अनुरोध कर रहा हो ... यह क्वेरी लेयर को एक कॉल में किया जाना चाहिए और बदले में इसे एक एकल डीटीओ मिलेगा जिसमें सभी आवश्यक डेटा होंगे। ।। । इसका कारण यह है कि डोमेन व्यवहार की तुलना में डेटा को सामान्य रूप से कई गुना अधिक किया जाता है, इसलिए इसे अनुकूलित करके आप सिस्टम के कथित प्रदर्शन को बढ़ाएंगे। "
क्वेंटिन-स्टारिन

4
यही कारण है कि हम एक CQRS प्रणाली में डेटा पढ़ने के लिए एक रिपॉजिटरी का उपयोग नहीं करेंगे । हम एक क्वेरी लिखने के लिए एक सरल वर्ग लिखेंगे (जो भी तकनीक सुविधाजनक या आवश्यक थी, अक्सर सीधे ADO.Net या Linq2Sql या SubSonic का उपयोग करके यहां अच्छी तरह से फिट बैठता है), बस (सभी) हाथ में कार्य के लिए आवश्यक डेटा से बचने के लिए, से बचने के लिए डीडीडी रिपोजिटरी की सभी सामान्य परतों के माध्यम से डेटा को खींचना। यदि हम डोमेन पर कमांड भेजना चाहते हैं तो हम केवल एक एग्रीगेट को पुनः प्राप्त करने के लिए एक रिपॉजिटरी का उपयोग करेंगे।
क्वेंटिन-स्टारिन

9
"मैं कल्पना नहीं कर सकता कि कोई भी जानकारी के संपूर्ण समुच्चय को वापस करने की वकालत करेगा जब आपको इसकी आवश्यकता नहीं है।" मैं यह कहने की कोशिश कर रहा हूं कि आप इस कथन से बिल्कुल सही हैं। जब आपको इसकी आवश्यकता न हो तो पूरी जानकारी एकत्र न करें। यह डीडीडी पर लागू CQRS का बहुत मूल है। आपको क्वेरी करने के लिए एक समुच्चय की आवश्यकता नहीं है। एक अलग तंत्र के माध्यम से डेटा प्राप्त करें, और फिर लगातार ऐसा करें।
क्वेंटिन-स्टारिन

2
@qes वास्तव में, प्रश्नों के लिए DDD का उपयोग न करने का सबसे अच्छा समाधान है (पढ़ें) :) लेकिन आप अभी भी DDD का उपयोग कमांड भाग में करते हैं, अर्थात डेटा संग्रहीत या अद्यतन करने के लिए। तो मेरे पास आपके लिए एक प्रश्न है, क्या आप हमेशा डीबी में डेटा अपडेट करने की आवश्यकता होने पर रिपॉजिटरी का उपयोग एंटिटीज के साथ करते हैं? मान लें कि आपको कॉलम में केवल एक छोटे से मान (किसी प्रकार का स्विच) को बदलने की आवश्यकता है, क्या आप अभी भी पूरे Entity को App लेयर में लोड करते हैं, एक मान (संपत्ति) को बदलते हैं और फिर पूरे Entity को DB में वापस सेव करते हैं? ओवरकिल का एक सा, भी?
एंड्रयू

8

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

  1. एक भंडार सरल होना चाहिए; यह केवल डोमेन ऑब्जेक्ट्स को संग्रहीत करने और उन्हें पुनर्प्राप्त करने के लिए ज़िम्मेदार है। अन्य सभी तर्क अन्य वस्तुओं में होने चाहिए, जैसे कारखाने और डोमेन सेवाएं।

  2. एक संग्रह एक संग्रह की तरह व्यवहार करता है जैसे कि यह समग्र जड़ों के स्मृति संग्रह में है।

  3. एक रिपॉजिटरी एक सामान्य डीएओ नहीं है, प्रत्येक रिपॉजिटरी का अपना अनूठा और संकीर्ण इंटरफ़ेस है। एक रिपॉजिटरी में अक्सर विशिष्ट खोजक विधियां होती हैं जो आपको डोमेन के संदर्भ में संग्रह को खोजने की अनुमति देती हैं (उदाहरण के लिए: मुझे उपयोगकर्ता एक्स के लिए सभी खुले ऑर्डर दें)। रिपॉजिटरी को एक सामान्य डीएओ की मदद से लागू किया जा सकता है।

  4. आदर्श रूप से खोजक विधियां केवल मूल जड़ों को लौटाएंगी। यदि वह अक्षम है, तो यह केवल उसी वस्तु को पढ़ा जा सकता है, जिसमें आपकी आवश्यकता के अनुसार वस्तुएं हों (हालाँकि यह एक प्लस है यदि ये मूल्य ऑब्जेक्ट डोमेन के संदर्भ में भी व्यक्त किए जा सकते हैं)। अंतिम उपाय के रूप में, भंडार का उपयोग किसी समुच्चय रूट के सबसेट के उपसमुच्चय या संग्रह को वापस करने के लिए भी किया जा सकता है।

  5. इस तरह की पसंद उपयोग की गई तकनीकों पर निर्भर करती है, क्योंकि आपको अपने डोमेन मॉडल को कुशलतापूर्वक उपयोग की जाने वाली तकनीकों के साथ व्यक्त करने का तरीका खोजने की आवश्यकता है।


यह निश्चित रूप से एक जटिल विषय है। सिद्धांत को व्यवहार में बदलना कठिन है, खासकर तब जब दो अलग-अलग और अलग-अलग सिद्धांतों को एक ही अभ्यास में जोड़ते हैं।
सेबस्टियन पैटन

6

मुझे नहीं लगता कि आपकी गेटऑडरहेडर्स विधि रिपॉजिटरी के उद्देश्य को बिल्कुल भी हरा देती है।

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

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


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

1
दृढ़ता तंत्र को डोमेन से हटा दिया जाता है, लेकिन ऐसा नहीं है जिसे जारी रखा जा रहा है। यदि आप खुद को यह कहते हुए पाते हैं कि "हमें यहां ऑर्डर हेडर सूचीबद्ध करने की आवश्यकता है", तो आपको अपने डोमेन में ऑर्डरहेडर को मॉडल करने और उन्हें अपने भंडार से पुनर्प्राप्त करने का एक तरीका प्रदान करना होगा।
एरिक किंग

इसके अलावा, "दृढ़ता के लिए मानक इंटरफ़ेस" पर लटका नहीं। जेनेरिक रिपॉजिटरी पैटर्न जैसी कोई चीज नहीं है जो सभी संभावित ऐप्स के लिए पर्याप्त होगी। प्रत्येक ऐप में मानक "गेटबायड", "सेव" आदि से परे कई रिपॉजिटरी विधियां होंगी। वे विधियां शुरुआती बिंदु हैं, अंतिम बिंदु नहीं।
एरिक किंग

4

DDD के मेरे उपयोग को "शुद्ध" DDD नहीं माना जा सकता है, लेकिन मैंने एक DB डेटा स्टोर के खिलाफ DDD का उपयोग करके निम्नलिखित वास्तविक विश्व रणनीतियों को अनुकूलित किया है।

  • एक समग्र जड़ में एक संबद्ध भंडार होता है
  • संबद्ध भंडार केवल उस मूल रूट द्वारा उपयोग किया जाता है (यह सार्वजनिक रूप से उपलब्ध नहीं है)
  • एक रिपॉजिटरी में क्वेरी कॉल हो सकती है (जैसे GetAllActiveOrders, GetOrderItemsForOrder)
  • एक सेवा रिपॉजिटरी और अन्य गैर-क्रूड संचालन (जैसे एक बैंक खाते से दूसरे खाते में स्थानांतरण धन, LoadById, खोज / ढूंढें, CreateEntity, आदि) के एक सार्वजनिक सबसेट को उजागर करती है।
  • मैं रूट -> सेवा -> रिपोजिटरी स्टैक का उपयोग करता हूं। एक DDD सेवा को केवल उस चीज के लिए उपयोग किया जाता है जिसका उपयोग कोई इकाई स्वयं जवाब नहीं दे सकती है (जैसे LoadById, TransferMoneyFromAccountToAccount), लेकिन वास्तविक दुनिया में मैं अन्य CRUD सेवाओं (सेव, डिलीट, क्वेरी) से भी चिपकी रहती हूं, हालांकि रूट को स्वयं इन का "जवाब / प्रदर्शन" करने में सक्षम होना चाहिए। ध्यान दें कि एक इकाई को किसी अन्य मूल रूट सेवा तक पहुँच देने में कुछ भी गलत नहीं है! हालाँकि, याद रखें कि आप किसी सेवा में शामिल नहीं होंगे (GetOrderItemsForOrder) लेकिन इसमें वह भी शामिल होगा जो रिपॉजिटरी में हो ताकि एग्रीगेट रूट इसका उपयोग कर सके। ध्यान दें कि एक सेवा को रिपॉजिटरी कैन की तरह किसी भी खुले प्रश्नों को उजागर नहीं करना चाहिए।
  • मैं आमतौर पर डोमेन मॉडल (इंटरफ़ेस के माध्यम से) में एक रिपॉजिटरी को परिभाषित करता हूं और एक अलग कंक्रीट कार्यान्वयन प्रदान करता हूं। मैं इसके उपयोग के लिए ठोस रिपॉजिटरी में इंजेक्शन लगाने वाले डोमेन मॉडल में एक सेवा को पूरी तरह से परिभाषित करता हूं।

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

आपके उदाहरण में, मैं शायद एक रिपॉजिटरी कॉल प्रदान करुँगी जो सिर्फ ऑर्डर हेडर लाएगी यदि मैं एक अलग कॉल पर विवरण लोड करना चाहती थी। ध्यान दें कि "ऑर्डरहेडर" होने से हम वास्तव में डोमेन में एक अतिरिक्त अवधारणा पेश कर रहे हैं।


3

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

आगे बढ़ते हुए। समुच्चय का विचार एक वस्तु है, कुल जड़, समग्र की संगति को बनाए रखने के लिए जिम्मेदार है। आपके उदाहरण में, आदेश अपनी ऑर्डर लाइनों में हेरफेर करने के लिए जिम्मेदार होगा।

आपके उदाहरण के लिए, सर्विस लेयर GetOrdersForCustomer की तरह एक ऑपरेशन को उजागर करेगा जो केवल ऑर्डर की सारांश सूची देखने के लिए आवश्यक है (जैसा कि आप उन्हें ऑर्डरहेडर्स कहते हैं)।

अंत में, रिपॉजिटरी पैटर्न केवल एक संग्रह नहीं है, बल्कि घोषणात्मक प्रश्नों के लिए भी अनुमति देता है। C # में आप क्वेरी ऑब्जेक्ट के रूप में LINQ का उपयोग कर सकते हैं , या अधिकांश अन्य O / RM एक क्वेरी ऑब्जेक्ट विनिर्देश प्रदान करते हैं।

डोमेन और डेटा मैपिंग परतों के बीच एक रिपॉजिटरी मध्यस्थता करती है, एक इन-मेमोरी डोमेन ऑब्जेक्ट संग्रह की तरह काम करती है। ग्राहक ऑब्जेक्ट क्वेरी विनिर्देशों को घोषित रूप से बनाते हैं और उन्हें संतुष्टि के लिए रिपॉजिटरी में जमा करते हैं। ( फाउलर रिपॉजिटरी पेज से )

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

आशा है कि इससे चीजों को स्पष्ट करने में मदद मिलेगी।


0

मुझे पता है कि यह एक पुराना सवाल है लेकिन मुझे लगता है कि यह एक अलग जवाब है।

जब मैं एक रिपॉजिटरी बनाता हूं तो यह आमतौर पर कुछ कैश्ड प्रश्नों को लपेटता है ।

फाउलर एक भंडार को डेटा स्टोर के रूप में परिभाषित करता है जो संग्रह शब्दार्थ का उपयोग करता है, और आमतौर पर स्मृति में रखा जाता है। इसका अर्थ है संपूर्ण वस्तु ग्राफ बनाना।

उन रिपॉजिटरी को अपने सर्वर में रखें ram। वे सिर्फ डेटाबेस के लिए वस्तुओं के माध्यम से पारित नहीं कर रहे हैं!

यदि मैं एक पृष्ठ सूचीकरण आदेशों के साथ एक वेब अनुप्रयोग में हूं, जिसे आप विवरण देखने के लिए क्लिक कर सकते हैं, तो संभावना है कि मैं अपने आदेश सूची पृष्ठ को आदेशों के बारे में विवरण (आईडी, नाम, राशि, तिथि) के बारे में बताना चाहता हूं। एक उपयोगकर्ता को यह तय करने में मदद करने के लिए कि वह किस पर गौर करना चाहता है।

इस बिंदु पर आपके पास दो विकल्प हैं।

  1. आप डेटाबेस को क्वेरी कर सकते हैं और सूची बनाने के लिए आपको जो भी चाहिए उसे वापस खींच सकते हैं, फिर आपको विस्तृत पृष्ठ पर व्यक्तिगत विवरण खींचने के लिए क्वेरी करनी होगी।

  2. आप 1 क्वेरी बना सकते हैं जो सभी जानकारी को वापस खींचती है और इसे कैश करती है। अगले पेज के अनुरोध पर आप डेटाबेस के बजाय सर्वर रैम से पढ़ते हैं। यदि वह उपयोगकर्ता वापस हिट करता है या अगले पृष्ठ का चयन करता है तो आप डेटाबेस में शून्य यात्राएं कर रहे हैं।

वास्तव में आप इसे कैसे लागू करते हैं, यह सिर्फ इतना है, और कार्यान्वयन विवरण। यदि मेरे सबसे बड़े उपयोगकर्ता के 10 आदेश हैं, तो मैं संभवतः विकल्प 2 के साथ जाना चाहता हूं। अगर मैं 10,000 आदेशों की बात कर रहा हूं तो विकल्प 1 की आवश्यकता है। उपरोक्त दोनों मामलों में और कई अन्य मामलों में, मैं चाहता हूं कि रिपॉजिटरी उस कार्यान्वयन विवरण को छिपाए।

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

मेरे अनुभव में डोमेन एग्रीगेट्स भारी लाभ प्रदान करते हैं।

  • वे एक विशाल भाग कोड का पुन: उपयोग करते हैं जो वास्तव में काम करता है।
  • वे अपने व्यवसाय तर्क को कोर परत में सही रखते हुए कोड को सरल बनाते हैं, ताकि इसे करने के लिए एसक्यूएल सर्वर प्राप्त करने के लिए एक बुनियादी ढांचे की परत के माध्यम से ड्रिल करना पड़े।
  • वे नाटकीय रूप से आपके प्रश्नों की संख्या को कम करके आपके प्रतिक्रिया समय में तेजी ला सकते हैं, क्योंकि आपको उन्हें आसानी से कैश कर सकते हैं।
  • एसक्यूएल जो मैं लिख रहा हूं वह अक्सर अधिक बनाए रखने योग्य होता है क्योंकि मैं अक्सर सब कुछ के लिए पूछ रहा हूं और सर्वर साइड की गणना कर रहा हूं।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.