मैं डोमेन ड्रिवन डिज़ाइन में गोता लगा रहा हूँ और कुछ अवधारणाएँ जो मुझे आ रही हैं, वे सतह पर बहुत मायने रखती हैं, लेकिन जब मैं उनके बारे में अधिक सोचता हूं तो मुझे आश्चर्य होता है कि क्या यह वास्तव में एक अच्छा विचार है।
उदाहरण के लिए, एग्रीगेट्स की अवधारणा समझ में आती है। आप स्वामित्व के छोटे डोमेन बनाते हैं ताकि आपको संपूर्ण डोमेन मॉडल से निपटना न पड़े।
हालाँकि, जब मैं एक वेब ऐप के संदर्भ में इस बारे में सोचता हूं, तो हम अक्सर डेटा के छोटे सबसेट को वापस खींचने के लिए डेटाबेस को हिट करते हैं। उदाहरण के लिए, कोई पृष्ठ केवल आदेशों की संख्या को सूचीबद्ध कर सकता है, जिसमें लिंक पर क्लिक करके आदेश को खोल सकते हैं और इसकी ऑर्डर आईडी देख सकते हैं।
तो मैं समझ समुच्चय सही हूँ, मैं आम तौर पर एक OrderAggregate कि सदस्यों होते हैं वापस जाने के लिए भंडार पैटर्न का प्रयोग करेंगे GetAll
, GetByID
, Delete
, और Save
। हाँ यह ठीक है। परंतु...
यदि मैं अपने सभी आदेशों को सूचीबद्ध करने के लिए GetAll को कॉल करता हूं, तो यह मुझे प्रतीत होगा कि इस पैटर्न को वापस करने के लिए समग्र जानकारी की पूरी सूची की आवश्यकता होगी, पूर्ण आदेश, आदेश लाइनें, आदि ... जब मुझे केवल उस जानकारी का एक छोटा सबसेट चाहिए (सिर्फ हेडर जानकारी)।
क्या मैं कुछ भूल रहा हूँ? या क्या आपके द्वारा उपयोग किए जाने वाले अनुकूलन का कोई स्तर है? मैं कल्पना नहीं कर सकता कि किसी को भी जानकारी के संपूर्ण समुच्चय को वापस करने की वकालत करेंगे जब आपको इसकी आवश्यकता नहीं है।
निश्चित रूप से, कोई आपकी रिपॉजिटरी की तरह तरीके बना सकता है GetOrderHeaders
, लेकिन यह पहली बार में रिपॉजिटरी जैसे पैटर्न का उपयोग करने के उद्देश्य को पराजित करता है।
क्या कोई मेरे लिए इसे स्पष्ट कर सकता है?
संपादित करें:
बहुत अधिक शोध के बाद, मुझे लगता है कि यहां डिस्कनेक्ट यह है कि एक शुद्ध रिपॉजिटरी पैटर्न इस बात से अलग है कि ज्यादातर लोग रिपोजिटरी होने के बारे में क्या सोचते हैं।
फाउलर एक भंडार को डेटा स्टोर के रूप में परिभाषित करता है जो संग्रह शब्दार्थ का उपयोग करता है, और आमतौर पर स्मृति में रखा जाता है। इसका अर्थ है संपूर्ण वस्तु ग्राफ बनाना।
इवांस ने एग्रीगेट रूट्स को शामिल करने के लिए रिपॉजिटरी को बदल दिया, और इस तरह रिपॉजिटरी केवल एक एग्रीगेट में ऑब्जेक्ट्स का समर्थन करने के लिए विवादास्पद है।
ज्यादातर लोग रिपॉजिटरी को गौरवशाली डेटा एक्सेस ऑब्जेक्ट के रूप में समझते हैं, जहां आप केवल जो भी डेटा चाहते हैं उसे प्राप्त करने के लिए तरीके बनाते हैं। यह आशय नहीं प्रतीत होता है जैसा कि फाउलर के पैटर्न इन एंटरप्राइज एप्लिकेशन आर्किटेक्चर में वर्णित है।
फिर भी अन्य लोग एक भंडार के बारे में सोचते हैं क्योंकि परीक्षण और मॉकिंग को आसान बनाने के लिए या सिस्टम के बाकी हिस्सों से दृढ़ता को कम करने के लिए मुख्य रूप से इस्तेमाल किया जाने वाला एक साधारण अमूर्त है।
मुझे लगता है कि उत्तर यह है कि यह एक बहुत अधिक जटिल अवधारणा है जितना मैंने पहले सोचा था।