मैं रॉबर्ट मार्टिन द्वारा वर्णित Clean Architecture को लागू करने की कोशिश कर रहा हूं। अधिक विशेष रूप से मैं VIPER का उपयोग कर रहा हूं जो स्वच्छ वास्तुकला का आईओएस संस्करण है।स्वच्छ वास्तुकला - रॉबर्ट मार्टिन - उपयोग मामलों को कैसे कनेक्ट करें
समस्या मेरे पास है इस प्रकार है:
उपयोगकर्ता उस पर स्थानों (पिन) के साथ किसी मानचित्र को देखकर शुरू होता है। यदि वह एक बटन पर क्लिक करता है, तो एक पिन गिरा दिया जाता है और उसे स्थान (या रद्द) के निर्माण के लिए किसी अन्य दृश्य में ले जाया जाता है (या संपादित करें कि यह एक मौजूदा पिन पर क्लिक था)। इस अन्य दृश्य में, उपयोगकर्ता स्थान की जानकारी संपादित कर सकते हैं और फिर "वापस" या "पूर्ण" (या "संपादित करें") पर क्लिक कर सकते हैं। यदि वह "पूर्ण" पर क्लिक करता है, तो PlaceDetailsViewController स्थान जानकारी के साथ PlaceDetailsPresenter को एक संदेश भेजता है और PlaceDetailsPresenter स्थान बनाने के लिए CreatePlaceInteractor का उपयोग करता है। यह इंटरैक्टर GUID देता है जिसका उपयोग स्थान की पहचान करने के लिए किया जाता है।
यदि उपयोगकर्ता जगह बनाने से पहले वापस क्लिक करता है, तो वह मानचित्र पर वापस आ जाता है और गिराए गए पिन ऊपर और दूर जाते हैं (क्योंकि इसमें कोई GUID नहीं है, यह एक नई जगह है और चली जाती है)। यदि वह बनाने के बाद वापस क्लिक करता है, तो पिन वहां रहता है (क्योंकि इसमें GUID होना चाहिए)।
मुझे उन सभी को कैसे कनेक्ट करना चाहिए और स्थान जानकारी (GUID सहित) को कहां रखा जाना चाहिए? थोड़ा और अधिक स्पष्ट करने के लिए:
- कौन MapPresenter को सूचित करना चाहिए कि पिन रहता है या चली जाती है? क्या यह प्लेस डिस्प्ले प्रतिनिधि है या क्या मुझे यह जानकारी PlaceDetailsWireframe -> MapWireframe -> MapPresenter -> MapView पर पास करनी चाहिए?
- वापस जाने से पहले, यह GUID को PlaceDetailsPresenter में या PlaceDetailsViewController में कहां रखा जाना चाहिए?
अभी है कि मैं क्या है:
संपादित करें:
मूल रूप से मुझे लगता है कि समस्या यह है कि सांप रॉबर्ट मार्टिन के स्वच्छ वास्तुकला से आया है और वह एक वेब (रेल) पृष्ठभूमि से आता है, इसलिए वह राज्य के बारे में ज्यादा नहीं सोचता (या इसे अपनी वार्ता में निर्दिष्ट नहीं करता है)।
जो मुख्य रूप से मेरा प्रश्न है, राज्य को कहां रखा जाना चाहिए, विभिन्न मॉड्यूल कैसे संवाद कर सकते हैं, यह वायरफ्रेम, या डेटाबेस के माध्यम से, या इंटरैक्टर्स के माध्यम से, या प्रस्तुतकर्ताओं के माध्यम से एक-दूसरे के साथ संवाद करना चाहिए यहां https://github.com/objcio/issue-13-viper-swift।
मैं सिर्फ सांप के साथ बाहर शुरू कर में GUID डालता है, लेकिन यह प्रस्तुतकर्ताओं एक दूसरे के बारे में पता करने के लिए मेरे लिए गलत लगता है। मैं वायरफ्रेम/राउटर के माध्यम से एक-दूसरे के साथ संवाद करने वाले मॉड्यूल का पक्ष लेता हूं। मुझे यहां सुधारने में खुशी है क्योंकि मैं अभी भी इस वास्तुकला को सीख रहा हूं। – bennythemink
मुझे लगता है कि आप वैसे ही सोचते हैं, हालांकि मुझे अभी भी उनके बीच जानकारी पास करने के लिए एक निर्णायक उत्तर नहीं मिला है, भले ही वायरफ्रेम के माध्यम से डेटा संरचनाओं को पार करना बेहतर हो (यहां 2 विकल्प, हमेशा एक ही, बड़े, डेटा संरचना, या आवश्यक न्यूनतम मात्रा में आवश्यक जानकारी (जो अधिक गैर-पुन: प्रयोज्य वर्गों को समाप्त करती है) को पारित करने के रास्ते में बदलती रहती है), या इंटरैक्टर्स में राज्य को बचाएं और अन्य प्रस्तुति में जानकारी पुनर्प्राप्त करने के लिए उनका उपयोग करें। मैंने एक और स्टैक ओवरफ्लो प्रश्न पोस्ट किया जो बताता है कि मेरा मतलब बड़ी डेटा संरचना से क्या है, बस इसे अभी तक नहीं मिला। –
http://stackoverflow.com/questions/29054526/viper-should-the-interactor-return-only-the-necessary-information –