2012-01-24 20 views
7

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

आवेदन के कई दृश्यों में, मुझे वर्तमान उपयोगकर्ता के किसी दिए गए प्राधिकरण के संबंध में नियंत्रण सक्षम या अक्षम करना होगा। मेरे पास पहले से ही एक आरपीसी सेवा है जो उपयोगकर्ता की जानकारी तक पहुंच प्रदान करती है जिसमें सभी आवश्यक जानकारी शामिल है।

अब मेरा प्रश्न: उपयोगकर्ता डीटीओ को क्लाइंट साइड पर स्टोर करने के लिए सबसे अच्छी जगह क्या है?

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

ईमानदार होने के लिए, मैं एक केंद्रीय रजिस्ट्री को प्राथमिकता देना चाहूंगा जहां UserDetails ऑब्जेक्ट डालना है और जो मेरे ऐप में कहीं से भी पहुंच योग्य है। क्या जीडब्ल्यूटी में पहले से ही ऐसी रजिस्ट्री है?

मेरे उदाहरण में, आप अक्सर क्षैतिज रूप से प्रयुक्त वस्तुओं से सामना कर सकते हैं। जीडब्ल्यूटी में उनके साथ कैसे निपटें?

उत्तर

5

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

+0

यह मेरा वर्तमान समाधान है, वास्तव में। हालांकि 1) यूनिट परीक्षण की बात करते समय स्थैतिक चर समस्याग्रस्त हैं और 2) यह तय करना मुश्किल है कि कौन सा हिस्सा (वर्ग) उस स्थिर उदाहरण को रखने के लिए जिम्मेदार है। एक प्रस्तुतकर्ता, आरपीसी सेवा (इसका मतलब यह होगा कि अगर मैं वहां से उपयोगकर्ता ऑब्जेक्ट तक पहुंचना चाहता हूं तो मेरे दृश्य ऑब्जेक्ट में आरपीसी सेवा की निर्भरता है। – rainer198

+0

मैं अपने वर्तमान उपयोगकर्ता को क्लाइंटफैक्टरी कार्यान्वयन में सरल, सरल सरल और KISS का पालन करता हूं सिद्धांत (http://en.wikipedia.org/wiki/KISS_principle) – koma

+0

हालांकि मैं क्लाइंट फैक्ट्री के बजाय जीआईएन का उपयोग कर रहा हूं, मुझे यह समाधान पसंद है। यह स्पष्ट है कि इस प्रश्न का एक सच्चा उत्तर नहीं हो सकता है (स्टैक ओवरफ्लो ने मुझे चेतावनी भी दी कि इसे खारिज कर दिया जा सकता है), इसलिए, रिले लार्क, अगर मैं दोनों उत्तरों को "सही" के रूप में चिह्नित कर सकता हूं, तो मैं ऐसा करूँगा ;-) – rainer198

4

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

+0

क्या आपका मतलब इंजेक्शन द्वारा जीआईएन के @ इंजेक्शन एनोटेशन के साथ प्रस्तुतकर्ता के कन्स्ट्रक्टर को पास करना है? – rainer198

+0

मैं वास्तव में इसे कन्स्ट्रक्टर परिभाषा में सादे-पुराने तर्कों के साथ निर्माता के पास भेजता हूं। यह इतना अतिरिक्त टाइपिंग नहीं है, और जब मैं कुछ बदलता हूं तो व्यवहार को पसंद करता हूं - हर बिंदु पर त्रुटियों को संकलित करना जो बदलने की जरूरत है। सभी सही बिंदुओं पर विचार करने का कारण बनता है, आईएमएचओ। –