స్విఫ్ట్లో రిపోజిటరీ డిజైన్ సరళి

మీ మోడళ్లను ప్రశ్నించడానికి శుభ్రమైన మార్గం

ఇది ఏ సమస్యను పరిష్కరిస్తుంది?

మీ మోడల్‌లోని వస్తువులను మీ కోడ్‌లోని వేర్వేరు ప్రదేశాల నుండి పదే పదే ప్రశ్నించాల్సిన అవసరం ఉంటే, మీ మోడళ్లతో పనిచేయడానికి మరియు నకిలీ ప్రశ్న కోడ్‌ను తొలగించడానికి ఒకే-ఎంట్రీ పాయింట్‌ను అందించడానికి రిపోజిటరీ నిజంగా సహాయపడుతుంది. మీరు దీన్ని మరింత ముందుకు తీసుకెళ్ళి ప్రోటోకాల్‌లతో ఉపయోగించవచ్చు, ఈ విధంగా మీరు అమలులను సులభంగా మార్చవచ్చు (ఉదాహరణకు యూనిట్ పరీక్షలకు) లేదా మీరు దీన్ని మరింత * డ్రమ్ రోల్ * జెనెరిక్ అబ్‌స్ట్రాక్షన్ చేయడానికి జెనెరిక్స్‌తో ఉపయోగించవచ్చు. ఈ వ్యాసంలో నేను ఈ కేసులన్నింటినీ కవర్ చేస్తాను.

సన్నివేశాన్ని గీయడం.

API నుండి డేటాను పొందే మరియు మోడల్ వస్తువులకు మ్యాప్ చేసే కొన్ని కోడ్ మీకు ఉందని చెప్పండి. ఈ ఉదాహరణలో నేను సర్వర్ నుండి వ్యాసాల జాబితాను తీసుకుంటాను.

ఇది కొంచెం అల్లరిగా అనిపించవచ్చు, కానీ ఇది కేవలం RxSwift, మోయాను నెట్‌వర్కింగ్ నైరూప్య పొరగా ఉపయోగిస్తుంది, కానీ ఏమి జరుగుతుందో అర్థం చేసుకోవడం నిజంగా ముఖ్యం కాదు. మీరు మీ డేటాను ఎలా తిరిగి పొందాలో పూర్తిగా మీ ఇష్టం.

ఈ కోడ్ ముక్క చేస్తుంది

  1. సర్వర్‌కు GET అభ్యర్థన
  2. తిరిగి వచ్చిన JSON ను ఆర్టికల్ వస్తువుల శ్రేణికి మ్యాప్ చేస్తుంది
  3. అన్ని పనులు పూర్తయినప్పుడు మూసివేత పిలువబడుతుంది.

మాకు రిపోజిటరీ ఎందుకు అవసరం?

ప్రస్తుతానికి మేము చేయలేము. మీరు మీ మొత్తం కోడ్ బేస్ లో ఒకసారి మాత్రమే API కి కాల్ చేస్తే, రిపోజిటరీని జోడించడం ఓవర్ కిల్ కావచ్చు (లేదా కొందరు ఓవర్ ఇంజనీరింగ్ అని చెప్పవచ్చు).

సరే… కానీ రిపోజిటరీ వస్తువు ఎప్పుడు ఉపయోగించడానికి అనుకూలంగా ఉంటుంది?
మీ కోడ్‌బేస్ పెరగడం మొదలవుతుందని, కథనాలను పదే పదే తీసుకురావడానికి మీరు కోడ్ రాయాలి. మీరు “కోడ్‌ను కాపీ చేసి, అన్ని వ్యాసాలను పొందాల్సిన చోట పేస్ట్ చేద్దాం” అని మీరు అనవచ్చు.

ఎటువంటి హాని చేయలేదు, ఎవరూ మరణించలేదు. రైట్?

ఆ సమయంలో మీ మెదడుల్లో పెద్ద ఎరుపు అలారం మెరుస్తూ ఉండాలి.

హలో రిపోజిటరీ.

రిపోజిటరీ అనేది మీ మోడళ్లను ఒకే చోట ప్రశ్నించడానికి అన్ని కోడ్‌లను కలుపుతుంది, కాబట్టి మీకు కావాలంటే మీకు ఒకే పాయింట్ ఎంట్రీ ఉంటుంది. అన్ని వ్యాసాలను పొందండి.

కథనాలను పొందడానికి పబ్లిక్ API ని అందించే రిపోజిటరీ వస్తువును సృష్టించండి.

ఇప్పుడు మేము ఈ పద్ధతిని పిలవవచ్చు మరియు అసలు కథనాలను పొందడానికి తెరవెనుక ఏమి జరుగుతుందో మేము ఆందోళన చెందాల్సిన అవసరం లేదు.
పద్ధతిని పిలవండి మరియు మీరు కథనాలను పొందుతారు. బాగుంది, సరియైనదా?
కానీ వేచి ఉండండి, ఇంకా చాలా ఉంది!

అన్ని వ్యాస పరస్పర చర్యలను నిర్వహించండి

మా మోడల్ వస్తువుతో సంకర్షణ చెందడానికి మరిన్ని పద్ధతులను జోడించడానికి మేము రిపోజిటరీని ఉపయోగించవచ్చు. చాలా సార్లు మీరు మీ మోడల్‌లో CRUD (సృష్టించండి, చదవండి, నవీకరించండి, తొలగించండి) ఆపరేషన్లు చేయాలనుకుంటున్నారు. బాగా, రిపోజిటరీలో ఈ కార్యకలాపాల కోసం తర్కాన్ని జోడించండి.

ఒకే కోడ్‌ను పదే పదే పునరావృతం చేయకుండా, మీ కోడ్ అంతటా ఉపయోగించడానికి ఇది మంచి API ని చేస్తుంది.

ఆచరణలో, రిపోజిటరీ వాడకం ఇలా ఉంటుంది.

చాలా బాగుంది మరియు చదవగలిగేది, సరియైనదా? కానీ, వేచి ఉండండి అది మరింత మెరుగవుతుంది.

పవర్-అప్: ప్రోటోకాల్స్

మునుపటి కోడ్‌లో, నేను ఎల్లప్పుడూ ‘API నుండి డేటాను పొందడం’ యొక్క ఉదాహరణను ఉపయోగించాను. ఆన్‌లైన్ మూలానికి బదులుగా స్థానిక JSON ఫైల్ నుండి డేటాను లోడ్ చేయడానికి మీరు మద్దతును జోడించాల్సిన అవసరం ఉంటే.

మీరు పద్ధతి పేర్లను జాబితా చేసే ప్రోటోకాల్‌ను సృష్టిస్తే, మీరు ఆన్‌లైన్ API కోసం ఒక అమలును సృష్టించవచ్చు మరియు డేటాను ఆఫ్‌లైన్‌లో పొందవచ్చు.

ఇది ఇలా ఉంటుంది.

ఒక ప్రోటోకాల్ కేవలం ‘మీరు నాకు అనుగుణంగా ఉంటే, మీకు ఈ పద్ధతుల సంతకాలు ఉండాలి, కానీ అసలు అమలు గురించి నేను పట్టించుకోను!’

కాబట్టి ఇది చాలా బాగుంది, మీరు వెబ్ఆర్టికల్ రిపోజిటరీ మరియు లోకల్ఆర్టికల్ రిపోజిటరీని సృష్టించవచ్చు. ప్రోటోకాల్‌లో జాబితా చేయబడిన అన్ని పద్ధతులు వారిద్దరికీ ఉంటాయి, కానీ మీరు 2 భిన్నమైన అమలులను వ్రాయవచ్చు.

పవర్-అప్: యూనిట్ టెస్టింగ్

మీరు మీ కోడ్‌ను యూనిట్ పరీక్షించాలనుకున్నప్పుడు ప్రోటోకాల్‌ల ఉపయోగం కూడా నిజంగా సౌకర్యవంతంగా ఉంటుంది, ఎందుకంటే మీరు రిపోజిటరీ ప్రోటోకాల్‌ను అమలు చేసే మరొక వస్తువును సృష్టించవచ్చు, కానీ బదులుగా మాక్ డేటాను అందిస్తుంది.

మీరు దీన్ని డిపెండెన్సీ ఇంజెక్షన్‌తో కలిపి ఉపయోగిస్తే, ఇది ఒక నిర్దిష్ట వస్తువును పరీక్షించడం నిజంగా సులభం చేస్తుంది.

ఒక ఉదాహరణ

మీకు వీక్షణ మోడల్ ఉందని చెప్పండి మరియు వీక్షణ మోడల్ దాని డేటాను రిపోజిటరీ ద్వారా పొందుతుంది.

మీరు వీక్షణ నమూనాను పరీక్షించాలనుకుంటే, మీరు వెబ్ నుండి పొందే కథనాలతో చిక్కుకున్నారు.
ఇది వాస్తవానికి మనకు కావలసినది కాదు. మా పరీక్ష సాధ్యమైనంతవరకు నిర్ణయాత్మకంగా ఉండాలని మేము కోరుకుంటున్నాము. ఈ సందర్భంలో, వెబ్ నుండి తిరిగి పొందిన కథనాలు కాలక్రమేణా మారవచ్చు, పరీక్షలు నడుస్తున్న సమయంలో ఇంటర్నెట్ కనెక్షన్ ఉండకపోవచ్చు, సర్వర్ డౌన్ కావచ్చు,… ఇవన్నీ మన పరీక్షలు విఫలమయ్యే సందర్భాలు, ఎందుకంటే అవి మా నియంత్రణలో లేదు. మరియు మేము పరీక్షించినప్పుడు, మేము నియంత్రణలో ఉండాలి.

అదృష్టవశాత్తూ దీన్ని పరిష్కరించడం నిజంగా చాలా సులభం.

హలో, డిపెండెన్సీ ఇంజెక్షన్.

మీరు ఇనిషియేజర్ ద్వారా ఆర్టికల్ రిపో ప్రాపర్టీని సెట్ చేయాలి. డిఫాల్ట్ కేసు, మీ ప్రొడక్షన్ కోడ్ కోసం మీకు కావలసినది మరియు మీరు యూనిట్ పరీక్ష రాసేటప్పుడు, మీరు మీ మాక్ వెర్షన్‌తో రిపోజిటరీని మార్చుకోవచ్చు.

కానీ మీరు ఆలోచిస్తూ ఉండవచ్చు, రకాలు గురించి ఏమిటి? వెబ్ఆర్టికల్ రిపోజిటరీ మోక్ఆర్టికల్ రిపోజిటరీ కాదు, కాబట్టి కంపైలర్ ఫిర్యాదు చేయలేదా? బాగా, మీరు ప్రోటోకాల్‌ను ఒక రకంగా ఉపయోగిస్తే కాదు. ఈ విధంగా మేము కంపైలర్‌కు తెలియజేస్తాము, ఆర్టికల్ రిపోజిటరీ ప్రోటోకాల్‌కు అనుగుణంగా ఉన్నంతవరకు ప్రతిదీ అనుమతించండి (ఇది వెబ్ మరియు మాక్ఆర్టికల్ రిపోజిటరీ రెండూ చేస్తుంది).

చివరి కోడ్ ఇలా ఉంటుంది.

మరియు మీ యూనిట్ పరీక్షలో మీరు దీన్ని ఇలా మార్చుకోవచ్చు.

మీ రిపోజిటరీ తిరిగి ఇచ్చే డేటాపై ఇప్పుడు మీకు పూర్తి నియంత్రణ ఉంది.

సూపర్ పవర్-అప్: జెనెరిక్స్

జెనెరిక్స్ ఉపయోగించి మీరు దీన్ని మరింత ముందుకు తీసుకెళ్లవచ్చు. మీరు దాని గురించి ఆలోచిస్తే, చాలా రిపోజిటరీ ఎల్లప్పుడూ ఒకే విధమైన ఆపరేషన్లను కలిగి ఉంటుంది

  1. అన్ని విషయాలు పొందండి
  2. కొన్ని విషయాలు పొందండి
  3. కొన్ని విషయాలు చొప్పించండి
  4. విషయం తొలగించండి
  5. ఒక విషయాన్ని నవీకరించండి

భిన్నంగా ఉన్న ఏకైక విషయం ‘విషయం’ అనే పదం, కాబట్టి ఇది జెనెరిక్స్‌తో ప్రోటోకాల్‌ను ఉపయోగించడానికి అద్భుతమైన అభ్యర్థి కావచ్చు. ఇది సంక్లిష్టంగా అనిపించవచ్చు, కాని వాస్తవానికి ఇది చాలా సులభం.

మొదట మేము ప్రోటోకాల్‌ను రిపోజిటరీగా మార్చాము, దాన్ని మరింతగా చేయడానికి… సాధారణం.
ఆపై మేము అన్ని ఆర్టికల్ రకాలను తీసివేసి, వాటిని మ్యాజిక్ టి ద్వారా భర్తీ చేస్తాము. అయితే టి అనే అక్షరం కేవలం ఒక ప్రత్యామ్నాయం… మనం కోరుకునే ఏదైనా. మేము ప్రోటోకాల్ యొక్క అనుబంధ రకంగా T ని గుర్తించాలి.

కాబట్టి ఇప్పుడు మన వద్ద ఉన్న ఏదైనా మోడల్ వస్తువు కోసం ఈ ప్రోటోకాల్‌ను ఉపయోగించవచ్చు.

1. ఆర్టికల్ రిపోజిటరీ

కంపైలర్ T నుండి ఆర్టికల్ రకాన్ని er హించుకుంటుంది, ఎందుకంటే పద్ధతులను అమలు చేయడం ద్వారా, T అంటే ఏమిటో మేము పేర్కొన్నాము. ఈ సందర్భంలో ఒక ఆర్టికల్ వస్తువు.

2. యూజర్ రిపోజిటరీ

అంతే.

మీరు వ్యాసాన్ని ఆస్వాదించారని నేను ఆశిస్తున్నాను మరియు మీకు ఏవైనా ప్రశ్నలు లేదా వ్యాఖ్యలు ఉంటే, వాటిని క్రింద అడగండి లేదా ట్విట్టర్‌లో నన్ను సంప్రదించండి మరియు చాట్ చేద్దాం.