वर्तमान में हम कुछ वेब अनुप्रयोगों में ORM के रूप में Entity फ्रेमवर्क का उपयोग कर रहे हैं, और अब तक, इसने हमें अच्छी तरह से अनुकूल किया है क्योंकि हमारे सभी डेटा एक ही डेटाबेस में संग्रहीत हैं। हम रिपॉजिटरी पैटर्न का उपयोग कर रहे हैं, और इसमें सेवाएँ (डोमेन लेयर) हैं जो इनका उपयोग करते हैं, और EF संस्थाओं को सीधे ASP.NET MVC नियंत्रकों को लौटाते हैं।
हालाँकि, एक 3 पार्टी एपीआई (एक वेब सेवा के माध्यम से) का उपयोग करने के लिए एक आवश्यकता आ गई है जो हमें अतिरिक्त जानकारी देगा जो हमारे डेटाबेस में उपयोगकर्ता से संबंधित है। हमारे स्थानीय उपयोगकर्ता डेटाबेस में, हम एक बाहरी आईडी स्टोर करेंगे जिसे हम अतिरिक्त जानकारी प्राप्त करने के लिए एपीआई प्रदान कर सकते हैं। काफी जानकारी उपलब्ध है, लेकिन सादगी के लिए, उनमें से एक उपयोगकर्ता की कंपनी (नाम, प्रबंधक, कमरा, नौकरी का शीर्षक, स्थान आदि) से संबंधित है। इस जानकारी का उपयोग हमारे वेब एप्लिकेशन में विभिन्न स्थानों पर किया जाएगा - जैसा कि एक ही स्थान पर उपयोग किए जाने के विपरीत है।
तो मेरा सवाल यह है कि इस जानकारी को पॉप्युलेट और एक्सेस करने के लिए सबसे अच्छी जगह कहाँ है? चूंकि इसका उपयोग विभिन्न स्थानों पर किया जाता है, इसलिए वेब अनुप्रयोग में हम जहां भी इसका उपयोग करते हैं, वहां इसे तदर्थ आधार पर लाना वास्तव में समझदारी नहीं है - इसलिए यह इस अतिरिक्त डेटा को डोमेन परत से वापस करने के लिए समझ में आता है।
मेरा प्रारंभिक विचार सिर्फ एक रैपर मॉडल वर्ग बनाना था जिसमें EF निकाय (EFUser) शामिल होगा, और एक नया 'ApiUser' वर्ग जिसमें नई जानकारी होगी - और जब हमें कोई उपयोगकर्ता मिलेगा, तो हमें EFUser मिलेगा, और फिर अतिरिक्त मिलेगा एपीआई से जानकारी, और ApiUser वस्तु आबाद। हालाँकि, एकल उपयोगकर्ताओं को प्राप्त करने के लिए ठीक होने के दौरान, यह कई उपयोगकर्ताओं को प्राप्त होने पर गिर जाता है। उपयोगकर्ताओं की सूची प्राप्त करते समय हम एपीआई को हिट नहीं कर सकते।
मेरा दूसरा विचार सिर्फ EFUser इकाई में एक सिंगलटन विधि जोड़ना था जो ApiUser को लौटाता है, और जरूरत पड़ने पर बस पॉप्युलेट करता है। यह उपरोक्त समस्या को हल करता है क्योंकि हम इसे केवल तब उपयोग करते हैं जब हमें इसकी आवश्यकता होती है।
या अंतिम विचार यह था कि हमारे डेटाबेस में डेटा की एक स्थानीय प्रतिलिपि रखें, और उपयोगकर्ता द्वारा लॉग इन करने पर इसे एपीआई के साथ सिंक्रनाइज़ करें। यह न्यूनतम काम है क्योंकि यह सिर्फ एक सिंक्रनाइज़ेशन प्रक्रिया है - और हमारे पास हिटिंग का ओवरहेड नहीं है। हर बार उपयोगकर्ता जानकारी प्राप्त करने के लिए DB और API। हालाँकि, इसका अर्थ है कि डेटा को दो स्थानों पर संग्रहीत करना, और यह भी मतलब है कि डेटा किसी भी उपयोगकर्ता के लिए पुराना नहीं है, जो कुछ समय के लिए लॉग इन नहीं हुआ है।
क्या किसी के पास इस तरह के परिदृश्य को संभालने के लिए कोई सलाह या सुझाव है?
it's not really sensible to fetch it on an ad-hoc basis
-- क्यों? प्रदर्शन कारणों से?