हमारे कोडबेस परिपक्व होने के कारण मैं संदेश पास करने के लिए जानकारी को पैकेज करने के तरीके के रूप में शब्दकोष पारित करने के पैटर्न की तरह नहीं दिख रहा हूं, फिर भी खराब कार्य करता हूं। यह स्ट्रिंग अक्षर के अनियंत्रित एपीआई दोनों भेजने और प्राप्त करने की क्रिया की आवश्यकता है।NSDorms को पैरामीटर के रूप में पास करने से बेहतर पैटर्न?
..in some function..
NSDictionary *info = [NSDictionary dictionaryWithObjectsAndKeys:
thisObject, @"thisKey",
thatObject, @"thatKey",
nil];
[[NSNotificationCenter defaultCenter] postNotificationName:@"MY_NOTIFICATION" object:nil userInfo:info];
....
और फिर someClass
के श्रोता में
- (void)someClassListener:(NSNotification *)notification {
NSDictionary *info = [notification userInfo];
ThisObject *ob1 = [info objectForKey:@"thisKey"];
ThatObject *ob2 = [info objectForKey:@"thatKey"];
}
आप को याद है कि thisKey
और thatKey
प्रकार ThisObject
और ThatObject
कि अधिसूचना के लिए की चाबियाँ हैं है, सुनिश्चित करें कि आप कुछ स्थिरांक कहीं उन लोगों के लिए बना सकते हैं कुंजी लेकिन यह वास्तव में समस्या को हल नहीं करता है।
और कहें कि आपके पास एक ऐसा कार्य है जिसके लिए 15 तर्क हैं, आप 15 पैरामीटर के साथ कोई फ़ंक्शन नहीं करने जा रहे हैं, यह केवल एक शब्दकोश को पास करने के लिए बहुत आसान होगा (हालांकि कम पठनीय) लेकिन अब आपके पास उपरोक्त के समान समस्या।
मैंने उन वर्गों के शीर्षलेख फ़ाइलों (यानी एक शीर्षलेख में दो इंटरफेस) में 'संदेश वर्ग' को तैयार करने के साथ खेला और संदेश वर्ग केवल उन वस्तुओं की एक सूची थी जिसे आप परिभाषित करते हैं और उस विधि को भेजते हैं जो मजबूत बनाता है अनुबंध लेकिन यह गलत लगता है।
अगर मैं typeDef
की तरह कुछ कर सकता है शीर्षक में एक पैरामीटर वस्तु यह बहुत अच्छा होगा लेकिन यह है कि समर्थन नहीं करता NSObject
के int
या float
आदि
अनिवार्य रूप से मैं कोशिश कर रहा हूँ की तरह ही बातें संदेश प्रेषक और संदेश रिसीवर के बीच एक मजबूत अनुबंध बनाएं, वह कार्य या अधिसूचनाएं हों।
मैं कुंजी के लिए स्थिरांक का उल्लेख नहीं करता क्योंकि यह एक अच्छा समाधान नहीं है क्योंकि आपको अभी भी देखना है कि कुंजी क्या है और यह मूल्य (ऑब्जेक्ट) के लिए एक मजबूत अनुबंध नहीं बना रहा है, एक सुझाव की तरह। कक्षा में डेटा को एक साथ जोड़ना एक दिशा थी जिसकी मैं जांच कर रहा था लेकिन ऐसा लगता है कि मैं जिस संदेश को पास करना चाहता हूं, उसके लिए कक्षा बनाने के लिए बोझिल लगता है, क्या यह 2 तर्क 10 हैं, क्या आप सहमत नहीं होंगे? – Shizam
@Shizam, यदि उन संदेशों को अलग-अलग शब्दकोशों में रखा जाएगा, तो आपको शायद एक से अधिक कक्षा की आवश्यकता होगी। लेकिन, अगर आप उन संदेशों के बारे में बात कर रहे हैं जो कभी-कभी एक शब्दकोश से दो कुंजी पास करते हैं, और कभी-कभी 10, तो यह अभी भी एक वर्ग वस्तु होगी। – rdelmar
@rdelmar मुझे जो कुछ भी है, वह हमारे कार्यक्रम में है, हमारे पास शायद 10-15 अनन्य अधिसूचनाएं हैं, उनमें से प्रत्येक अधिसूचना को संदेश के लिए अपनी संपत्तियों को परिभाषित करने के लिए अपनी कक्षा की आवश्यकता होगी। – Shizam