2012-03-31 15 views
10

तो, मेरे पास 2 प्रकार के डेटा हैं, कुछ को जारी रखने की जरूरत है और कुछ नहीं।आईफोन - देखने के लिए आर्किटेक्चर नियंत्रक और नेटवर्क अनुरोध

मैं अपने यूवीवी कंट्रोलर के अंदर अपने सभी नेटवर्क से संबंधित कोड कहां रखना है, जहां सभी नेटवर्क अनुरोध से शुरू होता है, या किसी अन्य परत में।

यह क्या मैं मन में था है:

एक परत NetworkManager कहा जाता है। NetworkManager मेरी सभी वेब सेवा कॉल के लिए सिंगरटन है।

डेटा है कि लगातार होने की जरूरत है और एक सूची में प्रस्तुत किया जा सकता है, मैं नेटवर्क प्रबंधक होता है के लिए अनुरोध जारी करता है, अपने स्थानीय कोर डेटा डीबी में प्रतिक्रिया बचाने के लिए, और मेरे UIViewController कि डेटा FetchResultsController का उपयोग कर को सुनने के लिए है।

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

1. एक और परत है कि ViewControllers और NetworkManager के बीच अलग करती है:

अनुरोध के इन प्रकार के लिए, के रूप में जहाँ तक मैं देख, वहाँ यह से निपटने में 2 तरीके हैं। चलो इसे Mediator पर कॉल करें। Mediator नेटवर्क प्रबंधक से शब्दकोश (JSON) अनुरोध प्राप्त करता है, ऐप तर्क के अनुसार निर्णय लेता है यदि इसके साथ कुछ और करने की आवश्यकता है, और फिर उपयुक्त नाम और डेटा के साथ अधिसूचना पोस्ट करें। यदि मध्यस्थ अनुरोध जारी करने वाले UIViewController को सहेजता है, तो वह अधिसूचना पोस्ट करने के बजाय सीधे उसे प्रतिक्रिया दे सकता है।

फ्लो इस तरह होगा:

MyUiViewController - > Mediator -> NetworkManger->Mediator-> PostNotification (or directly back to MyUiViewController) 

Pros: 
Decoupling 
Nice structure and separation of concerns 

Cons: 
Harder to code 
Sometimes harder to understand and debug. 

2. यह 3 स्तरित वास्तुकला के न होने का, लेकिन इसके बजाय ब्लॉक के साथ MyUiViewControllers, मुद्दे, नेटवर्क अनुरोध कर रहे हैं। MyUiViewController से पहले प्रतिक्रिया को मध्यस्थ करने के बजाय मध्यस्थता के बजाय, बस MyUiViewController ब्लॉक का उपयोग करके प्रतिक्रिया को संभालने दें क्योंकि वह वह है जो इसे जारी करता है।

Pros: 
Simple and quick to code 
Easy to understand 

Cons: 
Coupling of network code inside your controllers 

मैं क्या लोगों के अनुभव, या अन्य/ऐसा करने का बेहतर तरीका से सबसे अच्छा है के बारे में सुझाव और टिप्पणियाँ प्राप्त करने के लिए उम्मीद कर रहा था।

उत्तर

1

क्या आपके पास पहले से ही सबसे अच्छी विधि क्या है?

यहाँ मैं आम तौर पर क्या करना है,

एक NetworkManager जो सिंगलटन नहीं है। विधि OnSuccess, OnError के साथ प्रोटोकॉल को परिभाषित करें। इसे अपने व्यू कंट्रोलर में कार्यान्वित करें जो नेटवर्क कनेक्शन शुरू करता है। नेटवर्कमैनेजर पर प्रतिनिधि सेट करें और असीमित अनुरोध को निष्पादित करते समय प्रतिनिधि को कॉल करने दें।

ब्लॉक के बजाए प्रतिनिधियों का उपयोग करना आसान है क्योंकि इसे बनाए रखना आसान है।

यह सबसे अच्छा समाधान नहीं हो सकता है, लेकिन उम्मीद है कि यह आपको कुछ पॉइंटर्स देता है।

1

मैं विकल्प 1 के लिए सूचीबद्ध कुछ चीज़ों के साथ विकल्प 2 की अनुशंसा करता हूं।मेरे ऐप्स में मेरे पास ऑपरेशन के दो अलग-अलग तरीके होते हैं जो एक साथ काम करते हैं।

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

उदाहरण के लिए, यदि मैं प्लेयर डेटा सहेजता हूं तो मैं "प्लेयरडेटा अपडेटेड" जैसी अधिसूचना भेजूंगा। जब एक दृश्य नियंत्रक दिखाई देता है तो यह अधिसूचनाओं के लिए सुनता है। जब यह दिखाई नहीं दे रहा है तो यह अधिसूचनाओं को नहीं सुनता है क्योंकि डेटाबेस में किसी भी बदलाव को विज़ुअल विल्लएपियर के दौरान खोजा जाएगा।

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

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