मैं इसे "मिल" किया?
कहने के लिए खेद है, बिल्कुल नहीं।
कंटेक्स्ट ऑब्जेक्ट का लक्ष्य नहीं है, जो कि मजबूत टाइपिंग और encapsulation द्वारा गुजरने के साधनों के रूप में, कई तरीकों से पैरामीटर को पारित करने के लिए है। लक्ष्य प्रोटोकॉल और प्रस्तुति प्रौद्योगिकी से स्वतंत्र, सामान्य, लेकिन प्रबंधित तरीके से स्कॉप्ड डेटा को स्टोर करना है। एक दायरे में संग्रहीत डेटा प्रकृति द्वारा साझा किया जाता है, अभी भी संरचित किया जा सकता है, और एक विधि में पारित एक-ऑफ पैरामीटर से मूल रूप से अलग है।
संदर्भ वस्तु पैटर्न पहले Core J2EE Patterns 2nd Ed में पेश किया गया था। 'संदर्भ' भाग तथ्य यह है कि वस्तु एक गुंजाइश
(application/session/request/conversation/flash
जैसे) के संदर्भ में डेटा को होल्ड को दर्शाता है।
यह उद्देश्य है दसगुणा, इस तरह के HttpSession
और HttpRequest
के रूप में प्रोटोकॉल/प्रस्तुति-प्रौद्योगिकी विशिष्ट वर्गों से संभव हो, एप्लिकेशन डेटा और तर्क के रूप में के रूप में ज्यादा है।
पैटर्न कार्यान्वयन
संदर्भ ऑब्जेक्ट के तहत
, आवेदन/सत्र/अनुरोध/अन्य गुंजाइश लिए करना डेटा ServletContext
/HttpSession
/HttpRequest
/अन्य प्रोटोकॉल विशिष्ट वर्ग में सीधे नहीं डाल रहा है। इसके बजाय, डेटा एक POJO आवरण कक्षा में संग्रहीत किया जाता है, कि तब ServletRequest
/HttpSession
/HttpRequest
/अन्य में बैठता है।
संदर्भ ऑब्जेक्ट मानचित्र में डेटा संग्रहीत कर सकता है, लेकिन इसकी आवश्यकता नहीं है - यह डेटा के लिए प्रासंगिक किसी भी संरचना/प्रारूप में डेटा स्टोर कर सकता है।
एक आवेदन गुंजाइश प्रति एक संदर्भ वस्तु वर्ग, या कई वर्ग है जो एक व्यवस्थित रूप में डेटा को विभाजित, अत्यधिक कक्षा ब्लोट से बचने और चिंताओं की जुदाई को बढ़ावा देने का उपयोग कर सकते हैं।
संदर्भ वस्तु frontmost प्रस्तुति वर्गों (दृश्य, फ्रंट नियंत्रकों, प्रेषक) द्वारा किया जाता है। इन प्रेजेंटेशन क्लाइंट ऑब्जेक्ट्स स्कोप्ड संदर्भ डेटा स्टोर करने के लिए संग्रहीत स्कोप्ड डेटा और contextObject.put को पुनर्प्राप्त करने के लिए contextObject.get को कॉल करते हैं।
यह व्यापार/एकीकरण तर्क में पारित नहीं है। यह मजबूत वस्तुओं को पारित करके, व्यावसायिक वस्तुओं में कई मापदंडों को पारित करने के साधन के रूप में उपयोग नहीं किया जाता है। व्यापार और एकता स्तरों व्यापार प्रतिनिधि, एप्लिकेशन सेवाओं &/या सत्र Facades जो विशिष्ट दृढ़ता से टाइप पैरामीटर का उपयोग करके फ्रंटेड कर रहे हैं।
पैटर्न लाभ
- Testability: ईकाई परीक्षण केवल एक साधारण POJO उपहास करने के लिए है, न कि एक प्रोटोकॉल विशेष जटिल सर्वर वर्ग की तुलना में की जरूरत है इस तरह के
ServletContext
के रूप में या HttpRequest
- लचीलापन & Reusability: कोर आवेदन कक्षाओं की पतली प्रोटोकॉल-विशिष्ट 'प्रेजेंटेशन' परत से स्वतंत्र रूप से काम करता है। इसका अर्थ यह है कि एक एप्लिकेशन प्रोटोकॉल या प्रेजेंटेशन टेक्नोलॉजी (जैसे एचटीएमएल/एचटीटीपी/सर्वलेट और डब्ल्यूएपी/सर्वलेट और एक्सएमएल/एसओएपी/एचटीटीपी/ईजेबी और एचटीएमएल/एचटीटीपी/जेएसएफ) को आसानी से बदल सकता है या जोड़ सकता है।
टिप्पणियाँ
- एक ऐतिहासिक पैटर्न है
- एक बहस कर सकते ऐसे CDI, Guice, स्प्रिंग, सीवन, पहले से ही एक प्रोटोकॉल में लागू & दूसरों देना गुंजाइश भंडारण के रूप में है कि निर्भरता इंजेक्शन चौखटे, पर निर्भर तरीका। यानी कि सभी क्षेत्रों को पहले से ही संदर्भ ऑब्जेक्ट्स के रूप में लागू किया गया है, जिसका अर्थ है कि डेवलपर को अतिरिक्त संदर्भ ऑब्जेक्ट्स बनाने के लिए कम मजबूर किया गया है। यह पैटर्न को अस्वीकार नहीं करता है - इसका मतलब है कि सीडीआई ढांचा पहले ही पैटर्न का समर्थन करता है।
- गलत ढंग से लागू करते हैं, तो एक के साथ समाप्त कर सकते हैं "दर्रा के आसपास जिनॉर्मस संदर्भ आवेदन के दौरान ऑब्जेक्ट्स" antipattern
KaptajnKold का हवाला देते हुए: मुझे लगता है कि आप समझ में आ गया। हालांकि, मुझे यह भी लगता है कि इससे बचने के लिए एक विरोधी पैटर्न है। देखें here।
आपकी टिप्पणियां संदर्भ ऑब्जेक्ट के गलत संस्करण का संदर्भ देती हैं। संदर्भ ऑब्जेक्ट स्वयं विरोधी पैटर्न नहीं है।
यह भी देखें: [संदर्भ ऑब्जेक्ट डिज़ाइन पैटर्न क्या है?] (Http://stackoverflow.com/questions/771983/what-is-context-object-design-pattern) – emallove
मुझे लगता है कि @ glen-best answer चाहिए सही हो (63 बनाम 7 वोट)। –