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