2011-06-07 14 views
7

आप एक स्थान से दूसरे स्थान पर ऑब्जेक्ट कैसे प्राप्त करते हैं?जीडब्ल्यूटी गतिविधियां और स्थान संदर्भित स्थान

उदाहरण के लिए, मेरे पास संपर्कों की एक तालिका के साथ एक संपर्क दृश्य है, और संबंधित संपर्क सक्रियता/स्थान कक्षाएं हैं। अगर मैं एक संपर्क संपादित करना चाहता हूं, तो मैं तालिका पंक्ति पर क्लिक करता हूं और ContactEditorPlace पर जाता हूं। ContactEditorView को संपादित करने के लिए संपर्क कैसे मिलता है?

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

यदि ऑब्जेक्ट संदर्भ ContactEditorPlace के निर्माता में सेट नहीं है, तो यह ContactEditorActivity पर कैसे पहुंचता है? यह इवेंटबस के साथ किया जा सकता है, लेकिन यह एक ही गतिविधि के लिए एक संदर्भ को पारित करने के लिए बहुत सारे बॉयलरप्लेट होगा।

मैं टिप्पणी करता हूं कि मैं RequestFactory का उपयोग नहीं कर रहा हूं।

उत्तर

5
मेरी राय में

। जिस पंक्ति को आप संपादित करना चाहते हैं उस पर क्लिक करते समय आप आसानी से संपर्क संदर्भ पास कर सकते हैं।

हालांकि संभवत: उस पूरे ऑब्जेक्ट को टोकन के रूप में उपयोग करना अच्छा विचार नहीं है। मुझे लगता है कि यह उसकी आईडी का उपयोग करना सबसे अच्छा है और उसके बाद ऑब्जेक्ट को आईडी से लाता है जब इसे डिटेक्टाइजिंग और कन्स्ट्रक्टर को पास किया जाता है।

जहां तक ​​व्यय उदाहरण है, मुझे विश्वास है क्योंकि ऐसा इसलिए है क्योंकि वे अनुरोध फैक्ट्री का उपयोग करते हैं, जिसमें उन एंटिटी लोकेटर हैं जो अपनी आईडी के आधार पर इकाइयों को लाने में आसान बनाते हैं।

+0

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

+0

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

2

यदि आप स्थान को डीकॉप्ल करना चाहते हैं तो आप अपनी ऑब्जेक्ट को एन्सेप्लेट करने के लिए कस्टम ईवेंट बना सकते हैं और फिर ईवेंट ईवेंट के माध्यम से इस ईवेंट को पास कर सकते हैं।

अद्यतन:

इतिहास/स्थानों समर्थन टुकड़ा पहचानकर्ता साथ किया जाता है (आधिकारिक अवधि thats, गूगल उन्हें इतिहास या जगह टोकन कॉल)। स्थान FIs (टोकननाइज़ेशन) पार्स करके बनाए जाते हैं। आप एफआई को किसी भी तरह से प्रारूपित कर सकते हैं, लेकिन सीमा यह है कि वे तार हैं। एफआई ​​प्रारूप कुछ भी हो सकता है (उदा। # स्थान/उपस्थापन: arg1: arg2)। यह एफआई को पार्स करने और प्लेस बनाने के लिए आपके टोकननाइज़र का काम है।

आपके मामले में FI #contactedit: id हो सकता है। तो आपका टोकनेज़र इस टोकन को संपर्क एडिटरप्लेस बनाने का विश्लेषण करेगा जिसमें संपादन के लिए आईडी की आईडी शामिल है।

वहाँ जगह के निर्माता में वस्तु संदर्भ गुजर कोई समस्या नहीं है:

+1

धन्यवाद, पीटर, लेकिन मैं decouple नहीं करना चाहता।मैं जोड़ना चाहता हूं (हाँ, हाँ, "यही वह है जो उसने कहा")। संपर्क सूची और संपर्क संपादक बारीकी से बंधे हैं। अगर मेरा संपादक दृश्य केवल कुछ फ़ील्ड था तो मैं एक प्लेस छोड़ सकता था और संपर्क एडिटर व्यू कन्स्ट्रक्टर में संपर्क के लिए संदर्भ डाल सकता था और एक संवाद बॉक्स में संपादक दिखा सकता था, लेकिन यह पॉपअप के लिए बड़ा है और स्क्रीन की आवश्यकता है। एक कन्स्ट्रक्टर में एक संदर्भ डालने से कुछ लाइनें होती हैं जो इवेंट बस – Glenn

+0

बनाती हैं मैं कहने जा रहा था कि एक कन्स्ट्रक्टर में एक संदर्भ डालना एक घटना बस समाधान की तुलना में कुछ लाइनें है जिसके लिए कम से कम एक और वर्ग की आवश्यकता होती है --- यह नहीं होना चाहिए वह मुश्किल है। – Glenn

1

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

इस मामले में आप ऑब्जेक्ट की आईडी को प्लेस में पास कर सकते हैं और आपके द्वारा रखे गए कुछ कैश से ऑब्जेक्ट प्राप्त कर सकते हैं (जो सर्वर पर जाता है यदि यह कैश में नहीं है) या सीधे ऑब्जेक्ट को सर्वर से लाता है।

+0

धन्यवाद हिल्ब्रैंड। मैं समझता हूं कि स्थान का उपयोग नेविगेशन के लिए यूआरएल बनाने के लिए किया जाता है, और यूआरएल से राज्य के पुनर्निर्माण को सक्षम करने के लिए किया जाता है। और बड़े पैमाने पर अनियंत्रित भावना है कि इसे कम से कम तरीके से करना चाहिए, इसलिए मैं सोच रहा हूं कि संदर्भ के लिए स्थान का उपयोग करना एक बुरा विचार था। लेकिन ध्यान दें कि मेरे पास इच्छित डेटा के लिए पहले से ही एक कैश_ है: इसे ContactList कहा जाता है। आपका समाधान एक ही डेटा को दोबारा डाउनलोड करने या क्लाइंट साइड दृढ़ता परत लिखने के लिए है। – Glenn

संबंधित मुद्दे