स्विफ्टमधील रेपॉजिटरी डिझाइन नमुना

आपल्या मॉडेल्सना क्वेरी करण्याचा एक स्वच्छ मार्ग

कोणती समस्या सोडवते?

आपल्याला आपल्या कोडमधील वेगवेगळ्या स्थानांवरून आपल्या मॉडेल ऑब्जेक्ट्सची वारंवार पुन्हा चौकशी करण्याची आवश्यकता असल्यास, रिपॉझिटरी आपल्या मॉडेलसह कार्य करण्यासाठी एकल-प्रवेश बिंदू प्रदान करण्यासाठी आणि डुप्लिकेट क्वेरी कोड काढण्यास खरोखर उपयुक्त ठरू शकते. आपण हे आणखी पुढे घेऊन प्रोटोकॉलसह वापरू शकता, अशा प्रकारे आपण सहजपणे अंमलबजावणी स्विच करू शकता (उदाहरणार्थ युनिट चाचण्यांसाठी) किंवा आपण जेनेरिकसह अधिक * ड्रम रोल * जेनेरिक अ‍ॅबस्ट्रॅक्शन बनवू शकता. या लेखात मी या सर्व प्रकरणांचा समावेश करणार आहे.

देखावा रेखाटना.

समजा आपल्याकडे काही कोड आहे जो एपीआय मधून डेटा आणतो आणि हे मॉडेल ऑब्जेक्टवर नकाशे करतो. या उदाहरणात मी सर्व्हरकडून लेखांची सूची आणीन.

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

कोडचा हा भाग करतो

  1. सर्व्हरला एक GET विनंती
  2. अनुच्छेद ऑब्जेक्टच्या अ‍ॅरेमध्ये परत केलेले JSON नकाशे
  3. सर्व कामे पूर्ण झाल्यावर क्लोजर म्हणतात.

आम्हाला भांडारांची गरज का आहे?

ठीक आहे या क्षणी आम्ही नाही. आपण आपल्या संपूर्ण कोड बेसमध्ये एकदाच एपीआयला कॉल केल्यास, भांडार जोडणे ओव्हरकिल होऊ शकते (किंवा काहीजण कदाचित ओव्हर इंजिनियरिंग म्हणू शकतात).

ठीक आहे ... परंतु रेपॉजिटरी ऑब्जेक्ट कधी वापरण्यास सोयीस्कर आहे?
समजा, आपला कोडबेस वाढू लागतो आणि आपल्याला पुन्हा पुन्हा लेख आणण्यासाठी कोड लिहिण्याची आवश्यकता आहे. आपण म्हणू शकता की “आपण कोड कॉपी करू आणि जिथे आपल्याला सर्व लेख आणण्याची आवश्यकता असेल तेथे पेस्ट करा.”

कोणतीही हानी झाली नाही, कोणीही मरण पावला नाही. बरोबर?

त्या क्षणी एक मोठा लाल गजर आपल्या मेंदूत चमकू लागला पाहिजे.

हॅलो रिपॉझिटरी

रिपॉझिटरी म्हणजे फक्त एक ऑब्जेक्ट जे आपल्या मॉडेलच्या क्वेरीसाठी सर्व कोड एका ठिकाणी लपवून ठेवते, म्हणून आपणास एकल-बिंदू प्रविष्टी असेल तर उदा. सर्व लेख मिळवा.

चला एक रिपॉझिटरी ऑब्जेक्ट तयार करू जे लेख मिळविण्यासाठी एक सार्वजनिक एपीआय प्रदान करते.

आता आम्ही ही पद्धत कॉल करू शकतो आणि वास्तविक लेख मिळविण्यासाठी पडद्यामागे काय होते याची आम्हाला चिंता करण्याची गरज नाही.
फक्त मेथडवर कॉल करा आणि आपल्याला लेख मिळवा. छान, बरोबर?
पण थांबा, अजून काही आहे!

सर्व लेख परस्पर क्रिया हाताळा

आम्ही आमच्या मॉडेल ऑब्जेक्टशी संवाद साधण्यासाठी अधिक पद्धती जोडण्यासाठी रेपॉजिटरी वापरू शकतो. बर्‍याच वेळा आपण आपल्या मॉडेलवर सीआरयूडी (तयार करा, वाचा, अद्यतनित करा, हटवा) ऑपरेशन्स करू शकता. ठीक आहे, फक्त रेपॉजिटरीमध्ये या ऑपरेशन्सचे लॉजिक जोडा.

पुन्हा पुन्हा पुन्हा त्याच कोडची पुनरावृत्ती न करता आपल्या कोडमध्ये वापरण्यासाठी हे एक छान API करते.

सराव मध्ये, रेपॉजिटरीचा वापर यासारखे दिसेल.

खूप छान आणि वाचनीय, बरोबर? पण, थांबा हे आणखी चांगले होते.

पॉवर-अप: प्रोटोकॉल

मागील कोडमध्ये, मी नेहमीच ‘एपीआय वरून डेटा मिळवणे’ ही उदाहरणे वापरली. परंतु आपल्याला ऑनलाइन स्रोताऐवजी स्थानिक जेएसओएन फाइलमधून डेटा लोड करण्यासाठी समर्थन जोडण्याची आवश्यकता असल्यास काय करावे.

बरं, जर आपण एखादा प्रोटोकॉल तयार केला जो मेथडच्या नावांची यादी करेल तर आपण ऑनलाइन एपीआय साठी अंमलबजावणी तयार करू शकता आणि डेटा ऑफलाइन मिळवू शकता.

हे यासारखे दिसू शकते.

एका प्रोटोकॉलमध्ये फक्त असे म्हटले आहे की ‘जर तुम्ही माझे पालन केले तर तुमच्याकडे या पद्धती स्वाक्षर्‍या असणे आवश्यक आहे, पण प्रत्यक्ष अंमलबजावणीची मला काळजी नाही!’

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

पॉवर-अप: युनिट टेस्टिंग

आपण आपल्या कोडची चाचणी घेऊ इच्छित असल्यास प्रोटोकॉलचा वापर करणे खरोखरच सोयीस्कर आहे, कारण आपण रिपॉझिटरी प्रोटोकॉलची अंमलबजावणी करणारी आणखी एक ऑब्जेक्ट तयार करू शकता परंतु त्याऐवजी मॉक डेटा परत आणू शकता.

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

एक उदाहरण

समजा आपल्याकडे व्ह्यू मॉडेल आहे आणि व्ह्यू मॉडेलला त्याचा डेटा रिपॉझिटरीद्वारे मिळतो.

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

सुदैवाने हे सोडवणे खरोखर सोपे आहे.

हॅलो, अवलंबन इंजेक्शन.

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

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

अंतिम कोड यासारखे दिसेल.

आणि आपल्या युनिट चाचणीमध्ये आपण यासारखे बदलू शकता.

आपला रेपॉजिटरी कोणता डेटा परत करते यावर आता आपले पूर्ण नियंत्रण आहे.

सुपर पॉवर-अप: जेनेरिक

आपण जेनेरिक्स वापरुन हे आणखी पुढे घेऊ शकता. आपण याबद्दल विचार केल्यास, बर्‍याच रेपॉजिटरीमध्ये नेहमी समान कार्य असतात

  1. सर्व गोष्टी मिळवा
  2. काही गोष्टी मिळवा
  3. काही गोष्टी घाला
  4. गोष्ट हटवा
  5. एक गोष्ट अद्यतनित करा

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

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

म्हणून आता आपल्याकडे असलेल्या मॉडेल ऑब्जेक्टसाठी आम्ही हा प्रोटोकॉल वापरू शकतो.

1. लेख भांडार

कंपाईलर टी च्या प्रकाराला लेख अनुक्रमित करेल, कारण पद्धती लागू करून आम्ही टी म्हणजे काय ते निर्दिष्ट केले आहे. या प्रकरणात एक लेख ऑब्जेक्ट.

2. वापरकर्ता रेपॉजिटरी

बस एवढेच.

मला आशा आहे की आपण लेखाचा आनंद लुटला असेल आणि आपल्याकडे काही प्रश्न किंवा टिप्पण्या असल्यास त्या खाली फक्त त्यांना विचारा किंवा ट्विटरवर माझ्याकडे संपर्क साधा आणि आपण चॅट करू या.