2008-11-10 17 views
10

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

क्या यह सिर्फ मेरी अनुभवहीनता है (इस मामले में मैं बस बैठ सकता हूं और बाइंडिंग की मेरी समझ पर काम करने में कुछ समय बिता सकता हूं और चीजों को स्पष्ट/आसान बनने की उम्मीद करता हूं) या मैं बस सभी गोंद लिखने से बेहतर होगा खुद को इस तरह से कोड करें जो मुझे यकीन था कि मैं समझ सकता हूं और समस्या निवारण कर सकता हूं।

उत्तर

21

बाइंडिंग का उपयोग करें।

ध्यान दें कि बाइंडिंग से अधिक प्राप्त करने के लिए एमवीसी पैटर्न का पालन करें। इस की तुलना में यह लगता है आसान है, कोको लगभग आजकल आप के लिए सब कुछ करता है के रूप में:

  1. दृश्य: NSView और उपवर्गों (बेशक), NSCell और उपवर्गों, NSWindow और उपवर्गों
  2. नियंत्रक: NSController और उपवर्गों (विशेष रूप से NSArrayController)
  3. मॉडल: कोर डाटा

आप कोर डेटा का उपयोग करने नहीं जा रहे हैं, तो आप भूमिका के लिए मिलता है आप अपने मॉडल ऑब्जेक्ट्स करेंगे, लेकिन यह आसान है। यदि आप तेंदुए को लक्षित कर रहे हैं तो इनमें से अधिकतर ऑब्जेक्ट्स विधियां सरल एक्सेसर्स होंगी, जिन्हें आप @synthesize कर सकते हैं।

आप आमतौर पर कोई भी कोड लिखने से दूर नहीं हो सकते हैं, लेकिन बाइंडिंग्स आपको बहुत कम कोड लिखने में सक्षम बनाती हैं।

सिफारिश की पठन:

+0

अतिरिक्त बाइंडिंग, एक समझने के बाद, आसान हैं और वास्तव में शक्तिशाली हो सकते हैं, मेरे लिए, इसका उपयोग करने का कोई कारण नहीं है। –

8

बाइंडिंग प्रकृति में जादुई लग सकती है। बाइंडिंग के पीछे जादू को समझने के लिए, मुझे लगता है कि किसी को केवीसी/केवीओ को अच्छी तरह से समझना चाहिए। मैं वास्तव में पूरी तरह से मतलब है।

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

मैं सहमत हूं कि बाइंडिंग पहले बहुत डरावनी है।

5

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

4

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

+1

क्या आप बाध्य इंटरफेस के लिए डिबगिंग तकनीकों पर किसी भी ट्यूटोरियल/दस्तावेज़ीकरण की दिशा में मुझे विस्तृत या इंगित कर सकते हैं? –

+0

सबसे सरल चीजों में से एक यह है कि इंटरफ़ेस और मॉडल केवल प्रमुख पथों के माध्यम से जोड़े जाते हैं, वास्तविक मॉडल की बजाय परीक्षण इंटरफ़ेस को अपने इंटरफ़ेस को बाध्य करके मॉडल के हिस्सों को स्टब करना या नकल करना वाकई आसान है। –

2

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

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

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

1

उत्सुकता के लिए, मैंने बाइंडिंग का उपयोग करके अंत किया और कुछ दिनों के बाद अचानक उन्होंने "समझ में आना" शुरू कर दिया। तो मैं निश्चित रूप से आगे बढ़ने और उन्हें सीखने के लिए समय लेने की सिफारिश करता हूं।

मुझे ब्रायन वेबस्टर की सलाह भी बहुत उपयोगी थी, क्योंकि मैंने वास्तव में कुछ हद तक चीजों को पुराने तरीके से कर दिया था क्योंकि बाइंडिंग जो भी मैं चाहता था वह नहीं कर सका या क्योंकि यह करने के लिए निषिद्ध रूप से जटिल होता बाइंडिंग का उपयोग करने के लिए मुझे क्या चाहिए।

2

मेरी राय यह है कि हाँ, आपको बाइंडिंग अपनाना चाहिए; तकनीक अब अच्छी तरह से समझी और स्थिर है, और कोड की मात्रा के लिए यह करने लायक है जिसे आपको अब लिखने की आवश्यकता नहीं है। जब मैंने पहली बार बाइंडिंग पर स्विच किया, तो मुझे मिलान करने के लिए ऑब्जेक्ट्स देखने और मनाए जाने के जीवनकाल के साथ काफी परेशानी हुई, और यूआई ब्रेकेज के साथ क्योंकि यह वैध ऑब्जेक्ट देख रहा था, लेकिन गलत है। एक बार जब आप उन समस्याओं को दो बार देख चुके हैं, तो उन्हें जानें कि उन्हें कैसे बचें और उन्हें कैसे दिखाना है यदि वे दिखाई देते हैं तो सरल हो जाता है। Ish। मैं अभी भी "इस घटना के कारण यहां इस अद्यतन का कारण बनता हूं" डीबगर में निशान, लेकिन मुझे अभी भी खुशी है कि मैंने कदम बढ़ाया।