योग्य iOS आर्किटेक्चर कसे निवडावे (भाग 2)

MVC, MVP, MVVM, VIPER किंवा VIP

आपण येथे भाग एक सल्ला घेऊ शकता.

सर्वात महत्त्वाची iOS आर्किटेक्चर

एक संक्षिप्त विहंगावलोकन

एमव्हीसी

एमव्हीसी थर खालीलप्रमाणे आहेतः

एम: व्यवसाय तर्क, नेटवर्क स्तर आणि डेटा प्रवेश स्तर

व्ही: यूआय पातळी (यूआयकिट ऑब्जेक्ट्स, स्टोरीबोर्ड, झिब्स)

सी: मॉडेल आणि दृश्यामधील मध्यस्थी समन्वयित करते.

एमव्हीसी समजण्यासाठी आम्हाला ज्या संदर्भात त्याचा शोध लागला होता ते समजणे आवश्यक आहे. जुन्या वेब डेव्हलपमेंट दिवसांमध्ये जेव्हा व्ह्यूजला कोणताही दर्जा नव्हता तेव्हा MVC चा शोध लागला. जुन्या दिवसांमध्ये, आम्हाला वेबसाइटमध्ये दृश्य बदलांची आवश्यकता असते तेव्हा ब्राउझर प्रत्येक वेळी सर्व HTML रीलोड करतो. त्यावेळी दृश्य स्थिती कायम आणि जतन केली जात आहे याबद्दल कोणतीही कल्पना नव्हती.

उदाहरणार्थ, असे काही विकसक होते ज्यांनी समान एचटीएमएल फायली, पीएचपी आणि डेटाबेस प्रवेश वापरला. म्हणून एमव्हीसीचे मुख्य प्रेरणा म्हणजे दृश्याचे स्तर मॉडेल पातळीपासून विभक्त करणे. यामुळे मॉडेल पातळीची चाचणी वाढली. आरोपानुसार एमव्हीसीमध्ये दृश्य आणि मॉडेल थरांना एकमेकांबद्दल माहिती नसते. हे शक्य करण्यासाठी, कंट्रोलर नावाची एक मध्यम स्तर शोधला गेला. ही एसआरपी होती जी लागू केली गेली.

एमव्हीसी सायकलचे एक उदाहरणः

  1. वापरकर्त्याच्या कृती / दृश्या पातळीवरील वापरकर्ता इव्हेंट (उदा. "अद्यतन क्रिया") चालना दिली जाते आणि ही क्रिया नियंत्रकास दिली जाते.
  2. नियंत्रक जो मॉडेल स्तरावर डेटा पाठवितो
  3. नियंत्रकाकडे परत केलेला डेटा मॉडेल करा
  4. नियंत्रक म्हणतो की हे दृश्य नवीन डेटासह त्याची स्थिती अद्यतनित करेल
  5. त्याचे राज्य अद्यतन पहा

Mपल एमव्हीसी

आयओएसमध्ये, व्ह्यू कंट्रोलर यूआयकिट आणि लाइफसायकल दृश्यासह एकत्रित केलेले आहे, म्हणून ते शुद्ध एमव्हीसी नाही. तथापि, एमव्हीसी व्याख्येमध्ये असे म्हणण्याचे काही नाही की नियंत्रकास दृश्य किंवा मॉडेल विशिष्ट अंमलबजावणी माहित नसते. मॉडेल स्तरावरील जबाबदा .्यांना दृश्यापेक्षा वेगळे करणे हा त्याचा मुख्य हेतू आहे जेणेकरून आम्ही त्यांचा पुन्हा वापर करू आणि मॉडेलच्या पातळीची वेगळी परीक्षा घेऊ.

व्ह्यूकंट्रोलरमध्ये मॉडेल आहे आणि हे दृष्य आहे. समस्या अशी आहे की आम्ही कंट्रोलर कोड आणि व्यू कोड दोन्ही व्ह्यूकंट्रोलरवर लिहित आहोत.

एमव्हीसी बर्‍याचदा मॅसिव्ह व्ह्यू कंट्रोलर समस्येस कारणीभूत ठरते, परंतु हे केवळ पुरेसे जटिलते असलेल्या अॅप्समध्ये होते आणि गंभीर व्यवसाय बनतो.

दृश्य नियंत्रक अधिक स्पष्ट करण्यासाठी विकसक वापरू शकणार्‍या काही पद्धती आहेत. काही उदाहरणे:

  • डेबिट डिझाइन पॅटर्नचा वापर करुन टेबल व्ह्यू पद्धतींचा डेटा स्त्रोत आणि इतर फायलींसाठी प्रतिनिधी सारख्या इतर वर्गासाठी व्हीसी लॉजिक मिळवा.
  • रचना जबाबदार्‍या (उदा. कुलगुरूंच्या मुलाच्या नियंत्रणामध्ये विभाजित करणे) चे स्पष्ट स्पष्टीकरण तयार करा.
  • व्हर्च्युअल कंट्रोलरमध्ये नेव्हिगेशन लॉजिकची अंमलबजावणी करण्याची जबाबदारी काढून टाकण्यासाठी संयोजक डिझाइन पॅटर्न वापरा
  • डेटाप्रिसेन्टर रॅपर क्लास वापरा जे लॉजिकला एन्कप्ट करते आणि डेटा मॉडेलला डेटा आउटपुटमध्ये रुपांतरीत करते जे शेवटच्या वापरकर्त्याला सादर केलेल्या डेटाचे प्रतिनिधित्व करते.

एमव्हीसी विरूद्ध एमव्हीपी

जसे की आपण एमव्हीपी कडून आकृती पाहू शकता, एमव्हीसी अगदी समान आहे

एमव्हीसी एक पाऊल पुढे होते, परंतु तरीही काही गोष्टींबद्दल गैरहजेरी किंवा मौन बाळगले जाते.

दरम्यान, वर्ल्ड वाइड वेब वाढत आहे आणि विकसक समाजात बर्‍याच गोष्टी विकसित होत आहेत. उदाहरणार्थ, प्रोग्रामरने अजॅक्स वापरण्यास प्रारंभ केला आणि एकाच वेळी संपूर्ण एचटीएमएल पृष्ठाऐवजी केवळ पृष्ठांचे काही भाग लोड केले.

एमव्हीसीमध्ये, माझ्या मते, असे कोणतेही संकेत नाहीत की नियंत्रकास व्ह्यू (अनुपस्थिति) ची विशिष्ट अंमलबजावणी माहित नसावी.

एचटीएमएल हा व्ह्यू लेयरचा एक भाग होता आणि बर्‍याच प्रकरणांमध्ये ती मूर्ख होती. काही प्रकरणांमध्ये, हे वापरकर्त्याकडून फक्त इव्हेंट प्राप्त करते आणि जीयूआयची व्हिज्युअल सामग्री प्रदर्शित करते.

वेब पृष्ठांचे भाग भागांमध्ये लोड केल्यामुळे, या विभाजनामुळे दृश्य स्थितीचे जतन केले गेले आणि सादरीकरणाच्या तर्कासाठी जबाबदा responsibilities्या विभक्त करण्याची जास्त आवश्यकता निर्माण झाली.

प्रेझेंटेशन लॉजिक हे लॉजिक आहे जे यूजर इंटरफेस कसे प्रदर्शित करावे आणि वापरकर्ता इंटरफेस घटक एकमेकांशी कसे संवाद साधतात हे नियंत्रित करते. लोडिंग इंडिकेटर ने दर्शविणे / अ‍ॅनिमेट करणे कधी सुरू करावे आणि ते दर्शविणे / एनिमेट करणे कधी थांबवावे याचे एक नियंत्रण लॉजिक उदाहरण आहे.

एमव्हीपी आणि एमव्हीव्हीएममध्ये दृश्य स्तर इतका मूर्खपणाचा असावा की त्यात तर्कशास्त्र किंवा बुद्धिमत्ता नसते आणि iOS मध्ये दृश्य नियंत्रक दृश्यावरील लेयरचा भाग असावा. व्ह्यू मूक आहे याचा अर्थ असा की प्रेझेंटेशन लॉजिक देखील व्ह्यू प्लेनच्या बाहेरच आहे.

एमव्हीसीमधील एक समस्या म्हणजे सादरीकरणातील तर्कशास्त्र कोठे असावे हे स्पष्ट नाही. तो फक्त याबद्दल शांत आहे. सादरीकरण लॉजिक दृश्य स्तरावर किंवा मॉडेल स्तरावर असावे?

जर मॉडेलची भूमिका केवळ "कच्चा डेटा" प्रदान करण्याची असेल तर याचा अर्थ असा आहे की दृश्यातील कोड खालीलप्रमाणे आहेः

खालील उदाहरणाचा विचार करा: आमच्याकडे नाव आणि आडनाव आहे. दृश्यात आम्हाला वापरकर्तानाव "आडनाव, प्रथम नाव" (उदा. "फ्लोरेस, टियागो") म्हणून दर्शवायचे आहे.

जर मॉडेलची भूमिका "कच्चा डेटा" प्रदान करण्याची असेल तर याचा अर्थ असा आहे की दृश्यातील कोड खालीलप्रमाणे आहेः

फर्स्टनेम = यूजरमॉडल.गेट फर्स्टनेम () लास्टनेम द्या = यूजरमॉडल.गेट लास्टनेम () नेम लेबल.टेक्स्ट = आडनाव + “,“ + नाव

याचा अर्थ असा की वापरकर्त्याची इंटरफेस लॉजिक हाताळणे ही व्ह्यूची जबाबदारी आहे. तथापि, यामुळे वापरकर्त्याच्या इंटरफेस लॉजिकची चाचणी घेणे अशक्य होते.

दुसरा दृष्टिकोन म्हणजे केवळ मॉडेल दर्शविला जाणे आवश्यक असलेला डेटा दर्शविणे आणि व्यवसायातील तर्कशास्त्र पाहण्यापासून लपविणे. परंतु नंतर आमच्याकडे अशी मॉडेल आहेत जी व्यवसाय तर्क आणि वापरकर्ता इंटरफेस लॉजिक दोन्ही हाताळतात. हे एक चाचणी करण्यायोग्य घटक असेल, परंतु नंतर मॉडेल स्पष्टपणे अवलंबून असेल.

नाव = यूजरमॉडेल.गेड डिसप्लेनेम () नाव लेबल.टेक्स्ट = नाव द्या

हे एमव्हीपीला स्पष्ट आहे आणि प्रेझेंटेशन लॉजिक प्रस्तुतकर्ता स्तरावर राहील. हे प्रस्तुतकर्ता पातळीची चाचणी वाढवते. आता मॉडेल आणि प्रेझेंटर लेयरची कोणतीही समस्या नसल्यास चाचणी केली जाऊ शकते.

सामान्यत: एमव्हीपी अंमलबजावणीमध्ये हे दृश्य इंटरफेस / प्रोटोकॉलच्या मागे लपलेले असते आणि प्रस्तुतकर्तामध्ये UIKit चा संदर्भ असू नये.

लक्षात घेण्यासारखी आणखी एक गोष्ट म्हणजे परिवर्तनशील अवलंबन.

जर नियंत्रकाकडे अवलंबित्व म्हणून व्यवसायाचा स्तर असेल आणि व्यवसाय स्तरात अवलंबित्व म्हणून डेटा एक्सेस स्तर असेल तर नियंत्रकाकडे डेटा dataक्सेस लेयरसाठी ट्रान्झिटिव्ह अवलंबित्व असते. एमव्हीपी अंमलबजावणी विशेषत: सर्व स्तरांदरम्यान कराराचा (प्रोटोकॉल) वापर केल्यामुळे, तेथे संक्रमणात्मक निर्भरता नसते.

भिन्न कारणे देखील भिन्न कारणास्तव आणि भिन्न दराने बदलतात. म्हणून आपण एक स्तर स्विच केल्यास, यामुळे इतर स्तरांमध्ये दुय्यम प्रभाव / समस्या उद्भवू शकत नाहीत.

प्रोटोकॉल वर्गांपेक्षा अधिक स्थिर आहेत. लॉगमध्ये कोणत्याही अंमलबजावणीचा तपशील नसतो आणि कराराशी दुवा साधलेला नाही. म्हणूनच, एका स्तराची अंमलबजावणी तपशील अन्य स्तरावर परिणाम न करता बदलणे शक्य आहे.

कॉन्ट्रॅक्ट (प्रोटोकॉल) थर दरम्यान एक डिकॉप्लींग तयार करतात.

एमव्हीपी वि एमव्हीव्हीएम

एमव्हीव्हीएम आकृती

एमव्हीपी आणि एमव्हीव्हीएम मधील मुख्य फरक म्हणजे एमव्हीपीमध्ये दृश्यासह प्रेझेंटर इंटरफेस आणि एमव्हीव्हीएममध्ये दृश्य डेटा आणि इव्हेंट बदलांवर केंद्रित आहे.

एमव्हीपी मध्ये आम्ही इंटरफेस / प्रोटोकॉल वापरून प्रेझेंटर आणि व्ह्यू दरम्यान मॅन्युअल लिंक तयार करतो. एमव्हीव्हीएममध्ये आम्ही आरएक्सस्विफ्ट, केव्हीओ किंवा जेनेरिक्स आणि क्लोजरसह एक यंत्रणा सह स्वयंचलित डेटा बाइंडिंग करतो.

एमव्हीव्हीएममध्ये आम्हाला व्ह्यूमॉडल आणि व्ह्यू दरम्यान कराराची (उदा. जावा इंटरफेस / आयओएस प्रोटोकॉल) देखील आवश्यक नसते कारण आम्ही सामान्यपणे ऑब्झर्व्हर डिझाईन पॅटर्नद्वारे संवाद साधतो.

एमव्हीपी डेलीगेट पॅटर्न वापरते कारण प्रेझेंटर लेयर व्ह्यू लेयरला डिलिडेट्स कमांड करतो. म्हणूनच, त्या दृश्याबद्दल काहीतरी माहित असणे आवश्यक आहे, जरी ते फक्त इंटरफेस / प्रोटोकॉल स्वाक्षरी असेल. सूचना केंद्र आणि टेबलव्यू प्रतिनिधी यांच्यामधील फरक लक्षात घ्या. संप्रेषण चॅनेल तयार करण्यासाठी सूचना केंद्रास कोणत्याही इंटरफेसची आवश्यकता नाही. तथापि, टेबल व्ह्यू प्रतिनिधी वर्गाने लागू केलेला प्रोटोकॉल वापरतो.

शुल्क सूचकांच्या सादरीकरणाच्या लॉजिकबद्दल विचार करा. एमव्हीपीमध्ये, प्रस्तुतकर्ता व्ह्यूप्रोटोकोल.शो लॉलिंगइंडिकेटर चालविते. एमव्हीव्हीएममध्ये व्ह्यूमॉडेलमध्ये एक लोडिंग प्रॉपर्टी असू शकते. जेव्हा ही मालमत्ता स्वतः बदलते आणि अद्यतनित होते तेव्हा ओळखण्यासाठी व्ह्यू लेयर स्वयंचलित डेटा बाइंडिंगचा वापर करते. एमव्हीव्हीएमपेक्षा एमव्हीपी अधिक आकर्षक आहे कारण प्रस्तुतकर्ता आज्ञा जारी करते.

एमव्हीव्हीएम थेट ऑर्डरपेक्षा डेटा बदलांविषयी अधिक असते आणि आम्ही अद्यतने पाहण्यासाठी डेटा बदलांचा दुवा साधतो. जेव्हा आम्ही एमव्हीव्हीएमसमवेत आरएक्सस्विफ्ट आणि फंक्शनल रीएक्टिव्ह प्रोग्रामिंग प्रतिमान वापरतो, तेव्हा आम्ही कोडला कमी आकर्षक आणि अधिक घोषित केले आहे.

एमव्हीव्हीएमपेक्षा एमव्हीव्हीएमची चाचणी करणे सोपे आहे कारण एमव्हीव्हीएम ऑब्झर्व्हर डिझाइन पॅटर्न वापरते, जे घटकांमधील डेटा डीकूपल पद्धतीने हस्तांतरित करते. म्हणून आम्ही दृष्य आणि प्रेझेंटर यांच्यातील संप्रेषणाची चाचणी घेण्यासाठी मेथड कॉलची थट्टा करण्याऐवजी केवळ दोन ऑब्जेक्ट्सची तुलना करून डेटामधील बदल बघून चाचणी घेऊ शकतो.

पुनश्च: मी आयटमवर काही अद्यतने केली ज्यामुळे ती बरीच वाढली. म्हणून त्यास तीन भागात विभागणे आवश्यक होते. आपण येथे तिसरा भाग वाचू शकता.

भाग दोन येथे समाप्त. सर्व अभिप्राय स्वागत आहे. भाग तीन म्हणजे व्हीआयपीईआर, व्हीआयपी, रिअॅक्टिव्ह प्रोग्रामिंग, ट्रेड-ऑफ, मर्यादा आणि संदर्भ संवेदना.

वाचल्याबद्दल धन्यवाद! आपण या लेखाचा आनंद घेतल्यास कृपया टाळ्या वाजवा जेणेकरून इतरही ते वाचू शकतील :)