பொருத்தமான iOS கட்டமைப்பை எவ்வாறு தேர்வு செய்வது (பகுதி 2)

MVC, MVP, MVVM, VIPER அல்லது VIP

நீங்கள் இங்கே ஒரு பகுதியை அணுகலாம்.

மிக முக்கியமான iOS கட்டமைப்புகள்

ஒரு சுருக்கமான கண்ணோட்டம்.

எம்.வி.சி.

எம்.வி.சி அடுக்குகள் பின்வருமாறு:

எம்: வணிக தர்க்கம், பிணைய அடுக்கு மற்றும் தரவு அணுகல் அடுக்கு

வி: யுஐ நிலை (யுஐகிட் பொருள்கள், ஸ்டோரிபோர்டுகள், ஜிப்ஸ்)

சி: மாதிரி மற்றும் பார்வைக்கு இடையிலான மத்தியஸ்தத்தை ஒருங்கிணைக்கிறது.

எம்.வி.சியைப் புரிந்து கொள்ள, அது கண்டுபிடிக்கப்பட்ட சூழலை நாம் புரிந்து கொள்ள வேண்டும். காட்சிகள் அந்தஸ்து இல்லாத பழைய வலை அபிவிருத்தி நாட்களில் எம்.வி.சி கண்டுபிடிக்கப்பட்டது. பழைய நாட்களில், இணையதளத்தில் காட்சி மாற்றம் தேவைப்படும் ஒவ்வொரு முறையும் உலாவி அனைத்து HTML ஐ மீண்டும் ஏற்றும். அந்த நேரத்தில், பார்வை நிலை தொடர்ந்து நீடிக்கப்பட்டு சேமிக்கப்படுகிறது என்ற எண்ணம் இல்லை.

எடுத்துக்காட்டாக, ஒரே HTML கோப்புகள், PHP மற்றும் தரவுத்தள அணுகலைப் பயன்படுத்திய சில டெவலப்பர்கள் இருந்தனர். எனவே எம்.வி.சியின் முக்கிய உந்துதல் பார்வை மட்டத்தை மாதிரி மட்டத்திலிருந்து பிரிப்பதாகும். இது மாதிரி மட்டத்தின் சோதனை திறனை அதிகரித்தது. எம்.வி.சியில் பார்வை மற்றும் மாதிரி அடுக்குகள் ஒருவருக்கொருவர் பற்றி அறியக்கூடாது என்று கூறப்படுகிறது. இதை சாத்தியமாக்க, ஒரு கட்டுப்படுத்தி எனப்படும் இடைநிலை அடுக்கு கண்டுபிடிக்கப்பட்டது. இது எஸ்ஆர்பி பயன்படுத்தப்பட்டது.

எம்.வி.சி சுழற்சியின் எடுத்துக்காட்டு:

  1. பார்வை மட்டத்தில் ஒரு பயனர் செயல் / பயனர் நிகழ்வு (எ.கா. "புதுப்பிப்பு செயல்") தூண்டப்பட்டு, இந்த செயல் கட்டுப்படுத்திக்குத் தெரிவிக்கப்படுகிறது
  2. மாதிரி நிலைக்கு தரவை அனுப்பும் கட்டுப்படுத்தி
  3. திரும்பிய தரவை கட்டுப்படுத்திக்கு மாதிரியாகக் கொள்ளுங்கள்
  4. புதிய தரவுடன் பார்வை அதன் நிலையை புதுப்பிக்கும் என்று கட்டுப்படுத்தி கூறுகிறது
  5. அதன் நிலையைப் புதுப்பிப்பதைக் காண்க

ஆப்பிள் எம்.வி.சி.

IOS இல், வியூ கன்ட்ரோலர் UIKit மற்றும் வாழ்க்கை சுழற்சி காட்சியுடன் இணைக்கப்பட்டுள்ளது, எனவே இது தூய MVC அல்ல. இருப்பினும், எம்.வி.சி வரையறையில், கட்டுப்படுத்தியால் பார்வை அல்லது மாதிரி குறிப்பிட்ட செயலாக்கத்தை அறிய முடியாது என்று சொல்ல எதுவும் இல்லை. அதன் முக்கிய நோக்கம் மாதிரி மட்டத்தின் பொறுப்புகளை பார்வை மட்டத்திலிருந்து பிரிப்பதன் மூலம் அவற்றை மீண்டும் பயன்படுத்தலாம் மற்றும் மாதிரி அளவை தனிமையில் சோதிக்க முடியும்.

வியூ கன்ட்ரோலர் பார்வையைக் கொண்டுள்ளது மற்றும் மாதிரியை வைத்திருக்கிறது. சிக்கல் என்னவென்றால், நாங்கள் கட்டுப்பாட்டு குறியீடு மற்றும் பார்வைக் குறியீடு இரண்டையும் வியூ கன்ட்ரோலருக்கு எழுதுகிறோம்.

எம்.வி.சி பெரும்பாலும் பாரிய பார்வைக் கட்டுப்பாட்டு சிக்கல் எனப்படுவதை ஏற்படுத்துகிறது, ஆனால் இது போதுமான சிக்கலான பயன்பாடுகளில் மட்டுமே நிகழ்கிறது மற்றும் தீவிர வணிகமாகிறது.

காட்சி கட்டுப்பாட்டாளரை தெளிவுபடுத்துவதற்கு டெவலப்பர் பயன்படுத்தக்கூடிய சில முறைகள் உள்ளன. சில எடுத்துக்காட்டுகள்:

  • அட்டவணை காட்சி முறைகளின் தரவு மூலம் மற்றும் பிரதிநிதி வடிவமைப்பு முறையைப் பயன்படுத்தி பிற கோப்புகளுக்கான பிரதிநிதி போன்ற பிற வகுப்புகளுக்கு வி.சி தர்க்கத்தை பிரித்தெடுக்கவும்.
  • கலவை பொறுப்புகளின் தெளிவான முறிவை உருவாக்கவும் (எ.கா., வி.சி.யை குழந்தை பார்வைக் கட்டுப்பாடுகளாகப் பிரித்தல்).
  • மெய்நிகர் கட்டுப்படுத்தியில் வழிசெலுத்தல் தர்க்கத்தை செயல்படுத்துவதற்கான பொறுப்பை நீக்க ஒருங்கிணைப்பாளர் வடிவமைப்பு முறையைப் பயன்படுத்தவும்
  • டேட்டாபிரெசெண்டர் ரேப்பர் வகுப்பைப் பயன்படுத்தவும், இது தர்க்கத்தை இணைத்து தரவு மாதிரியை தரவு வெளியீட்டாக மாற்றுகிறது, இது இறுதி பயனருக்கு வழங்கப்பட்ட தரவைக் குறிக்கிறது.

எம்விசி எதிராக எம்விபி

எம்விபியிலிருந்து வரைபடத்தை நீங்கள் காண முடியும் என, எம்விசி மிகவும் ஒத்திருக்கிறது

எம்.வி.சி ஒரு படி மேலே இருந்தது, ஆனால் அது இன்னும் சில விஷயங்களைப் பற்றி இல்லாதது அல்லது ம silence னத்தால் குறிக்கப்பட்டது.

இதற்கிடையில், உலகளாவிய வலை வளர்ந்தது மற்றும் டெவலப்பர் சமூகத்தில் பல விஷயங்கள் வளர்ந்தன. எடுத்துக்காட்டாக, புரோகிராமர்கள் அஜாக்ஸைப் பயன்படுத்தத் தொடங்கினர் மற்றும் முழு HTML பக்கத்திற்கும் பதிலாக பக்கங்களின் பகுதிகளை மட்டுமே ஏற்றுவர்.

எம்.வி.சியில், பார்வை (இல்லாதது) இன் குறிப்பிட்ட செயல்பாட்டை கட்டுப்படுத்தி அறியக்கூடாது என்பதற்கான அறிகுறி எதுவும் இல்லை.

HTML பார்வை அடுக்கின் ஒரு பகுதியாக இருந்தது, மேலும் நிறைய வழக்குகள் அந்த முட்டாள். சில சந்தர்ப்பங்களில், இது பயனரிடமிருந்து நிகழ்வுகளைப் பெறுகிறது மற்றும் GUI இன் காட்சி உள்ளடக்கத்தைக் காட்டுகிறது.

வலைப்பக்கங்களின் பகுதிகள் பகுதிகளாக ஏற்றப்பட்டதால், இந்த பிரிவு பார்வை நிலையைப் பாதுகாக்க வழிவகுத்தது மற்றும் விளக்கக்காட்சி தர்க்கத்திற்கான பொறுப்புகளைப் பிரிப்பதற்கான அதிக தேவைக்கு வழிவகுத்தது.

விளக்கக்காட்சி தர்க்கம் என்பது பயனர் இடைமுகம் எவ்வாறு காட்டப்படும் மற்றும் பயனர் இடைமுக கூறுகள் ஒருவருக்கொருவர் எவ்வாறு தொடர்பு கொள்கின்றன என்பதைக் கட்டுப்படுத்தும் தர்க்கமாகும். ஒரு ஏற்றுதல் காட்டி எப்போது காட்ட / அனிமேஷன் செய்யத் தொடங்க வேண்டும், எப்போது காண்பிப்பது / உயிரூட்டுவது நிறுத்தப்பட வேண்டும் என்பதற்கான கட்டுப்பாட்டு தர்க்கம் ஒரு எடுத்துக்காட்டு.

எம்விபி மற்றும் எம்விவிஎம் ஆகியவற்றில், பார்வை அடுக்கு எந்தவிதமான தர்க்கமும் புத்திசாலித்தனமும் இல்லாத அளவுக்கு முட்டாள்தனமாக இருக்க வேண்டும், மேலும் iOS இல் பார்வைக் கட்டுப்படுத்தி பார்வை அடுக்கின் ஒரு பகுதியாக இருக்க வேண்டும். பார்வை ஊமை என்பது உண்மை என்னவென்றால், விளக்கக்காட்சி தர்க்கம் கூட பார்வை விமானத்திற்கு வெளியே உள்ளது.

எம்.வி.சியில் உள்ள சிக்கல்களில் ஒன்று, விளக்கக்காட்சி தர்க்கம் எங்கு செல்ல வேண்டும் என்பது தெளிவாகத் தெரியவில்லை. அவர் அதைப் பற்றி வெறுமனே அமைதியாக இருக்கிறார். விளக்கக்காட்சி தர்க்கம் பார்வை விமானத்தில் அல்லது மாதிரி விமானத்தில் இருக்க வேண்டுமா?

மாதிரியின் பங்கு "மூல தரவு" மட்டுமே வழங்குவதாக இருந்தால், பார்வையில் உள்ள குறியீடு பின்வருமாறு:

பின்வரும் எடுத்துக்காட்டைக் கவனியுங்கள்: முதல் மற்றும் கடைசி பெயரைக் கொண்ட ஒரு பயனர் எங்களிடம் இருக்கிறார். பார்வையில் பயனர்பெயரை "கடைசி பெயர், முதல் பெயர்" (எ.கா. "புளோரஸ், தியாகோ") எனக் காட்ட வேண்டும்.

மாதிரியின் பங்கு "மூல" தரவை வழங்குவதாக இருந்தால், பார்வையில் உள்ள குறியீடு பின்வருமாறு:

firstName = userModel.getFirstName () lastName = userModel.getLastName () nameLabel.text = கடைசி பெயர் + “,“ + முதல் பெயர்

இதன் பொருள் பயனர் இடைமுக தர்க்கத்தை கையாள்வது வியூவின் பொறுப்பு. இருப்பினும், இது பயனர் இடைமுக தர்க்கத்தை அலகு சோதிக்க இயலாது.

மற்ற அணுகுமுறை என்னவென்றால், மாதிரியானது காண்பிக்கப்பட வேண்டிய தரவை மட்டுமே காண்பிப்பதோடு வணிக தர்க்கத்தைப் பார்ப்பதிலிருந்து மறைக்க வேண்டும். ஆனால் வணிக தர்க்கம் மற்றும் பயனர் இடைமுக தர்க்கம் இரண்டையும் கையாளும் மாதிரிகள் எங்களிடம் உள்ளன. இது ஒரு சோதனைக்குரிய நிறுவனமாக இருக்கும், ஆனால் பின்னர் அந்த மாதிரி மறைமுகமாக பார்வையைச் சார்ந்தது.

name = userModel.getDisplayName () nameLabel.text = name ஐ விடுங்கள்

இது எம்விபிக்கு தெளிவாக உள்ளது மற்றும் விளக்கக்காட்சி தர்க்கம் தொகுப்பாளர் மட்டத்தில் உள்ளது. இது தொகுப்பாளர் மட்டத்தின் சோதனைத்திறனை அதிகரிக்கிறது. இப்போது மாடல் மற்றும் தொகுப்பாளர் லேயரை எந்த பிரச்சனையும் இல்லாமல் சோதிக்க முடியும்.

வழக்கமாக எம்விபி செயலாக்கங்களில் பார்வை ஒரு இடைமுகம் / நெறிமுறையின் பின்னால் மறைக்கப்படுகிறது மற்றும் தொகுப்பாளரில் யுஐகிட் பற்றிய குறிப்புகள் எதுவும் இருக்கக்கூடாது.

கவனிக்க வேண்டிய மற்றொரு விஷயம் இடைநிலை சார்புநிலைகள்.

கட்டுப்படுத்தி ஒரு வணிக அடுக்கை ஒரு சார்புநிலையாகவும், வணிக அடுக்கு தரவு அணுகல் அடுக்கை ஒரு சார்புநிலையாகவும் வைத்திருந்தால், கட்டுப்படுத்தி தரவு அணுகல் அடுக்குக்கு ஒரு இடைநிலை சார்பு உள்ளது. எம்விபி செயலாக்கங்கள் பொதுவாக எல்லா நிலைகளுக்கும் இடையில் ஒரு ஒப்பந்தத்தை (நெறிமுறை) பயன்படுத்துவதால், இடைநிலை சார்புகள் எதுவும் இல்லை.

வெவ்வேறு அடுக்குகளும் வெவ்வேறு காரணங்களுக்காகவும் வெவ்வேறு விகிதங்களிலும் மாறுகின்றன. எனவே நீங்கள் ஒரு நிலைக்கு மாறினால், இது மற்ற நிலைகளில் இரண்டாம் நிலை விளைவுகள் / சிக்கல்களை ஏற்படுத்தாது.

நெறிமுறைகள் வகுப்புகளை விட நிலையானவை. பதிவுகள் எந்த செயல்படுத்தல் விவரங்களையும் கொண்டிருக்கவில்லை மற்றும் ஒப்பந்தங்களுடன் இணைக்கப்படவில்லை. எனவே, ஒரு நிலை செயல்படுத்தும் விவரங்களை மற்ற நிலைகளை பாதிக்காமல் மாற்ற முடியும்.

ஒப்பந்தங்கள் (நெறிமுறைகள்) அடுக்குகளுக்கு இடையில் துண்டிக்கப்படுவதை உருவாக்குகின்றன.

எம்விபி vs எம்விவிஎம்

எம்.வி.வி.எம் வரைபடம்

எம்விபி மற்றும் எம்விவிஎம் இடையேயான ஒரு முக்கிய வேறுபாடு என்னவென்றால், எம்விபியில் தொகுப்பாளர் பார்வையுடன் இடைமுகங்கள், மற்றும் எம்விவிஎம்மில் பார்வை தரவு மற்றும் நிகழ்வு மாற்றங்களை நோக்கி உதவுகிறது.

எம்விபியில், தொகுப்பாளருக்கும் இடைமுகங்களுக்கும் / நெறிமுறைகளைப் பயன்படுத்தி பார்வைக்கும் இடையில் ஒரு கையேடு இணைப்பை உருவாக்குகிறோம். MVVM இல், RxSwift, KVO அல்லது பொதுவான மற்றும் மூடல் கொண்ட ஒரு பொறிமுறையுடன் ஒரு தானியங்கி தரவு பிணைப்பை நாங்கள் மேற்கொள்கிறோம்.

எம்.வி.வி.எம்மில், வியூ மோடலுக்கும் பார்வைக்கும் இடையில் ஒரு ஒப்பந்தம் (எ.கா. ஜாவா இடைமுகம் / iOS நெறிமுறை) கூட எங்களுக்குத் தேவையில்லை, ஏனெனில் நாங்கள் வழக்கமாக அப்சர்வர் வடிவமைப்பு முறை வழியாக தொடர்பு கொள்கிறோம்.

MVP பிரதிநிதி முறையைப் பயன்படுத்துகிறது, ஏனெனில் தொகுப்பாளர் அடுக்கு பார்வை அடுக்குக்கு கட்டளைகளை வழங்குகிறது. எனவே, அவர் பார்வையைப் பற்றி ஏதாவது தெரிந்து கொள்ள வேண்டும், அது இடைமுகம் / நெறிமுறை கையொப்பமாக இருந்தாலும் கூட. அறிவிப்பு மையத்திற்கும் டேபிள் வியூ பிரதிநிதிகளுக்கும் உள்ள வித்தியாசத்தைப் பற்றி சிந்தியுங்கள். தகவல்தொடர்பு சேனலை உருவாக்க அறிவிப்பு மையத்திற்கு எந்த இடைமுகங்களும் தேவையில்லை. இருப்பினும், வகுப்புகள் செயல்படுத்த வேண்டிய நெறிமுறையை டேபிள் வியூ பிரதிநிதிகள் பயன்படுத்துகின்றனர்.

கட்டணக் குறிகாட்டியின் விளக்கக்காட்சி தர்க்கத்தைப் பற்றி சிந்தியுங்கள். MVP இல், தொகுப்பாளர் ViewProtocol.showLoadingIndicator ஐ இயக்குகிறார். எம்.வி.வி.எம் இல், வியூமோடலில் ஒரு ஐலோடிங் சொத்து இருக்கலாம். இந்த சொத்து தன்னை மாற்றி புதுப்பிக்கும்போது அடையாளம் காண காட்சி அடுக்கு தானியங்கி தரவு பிணைப்பைப் பயன்படுத்துகிறது. எம்.வி.வி.எம்-ஐ விட எம்.வி.பி மிகவும் கட்டாயமானது, ஏனெனில் தொகுப்பாளர் கட்டளைகளை வழங்குகிறார்.

நேரடி ஆர்டர்களைக் காட்டிலும் தரவு மாற்றங்களைப் பற்றி எம்.வி.வி.எம் அதிகம், மேலும் புதுப்பிப்புகளைக் காண தரவு மாற்றங்களை இணைக்கிறோம். எம்.வி.வி.எம் உடன் RxSwift மற்றும் ஒரு செயல்பாட்டு எதிர்வினை நிரலாக்க முன்னுதாரணத்தைப் பயன்படுத்தும்போது, ​​குறியீட்டை இன்னும் குறைவான கட்டாயமாகவும் அதிக அறிவிப்புடனும் செய்துள்ளோம்.

எம்.வி.வி.எம் ஐ விட எம்.வி.வி.எம் சோதனை செய்வது எளிதானது, ஏனெனில் எம்.வி.வி.எம் அப்சர்வர் டிசைன் பேட்டர்னைப் பயன்படுத்துகிறது, இது கூறுகளுக்கு இடையில் தரவை துண்டிக்கப்பட்ட முறையில் மாற்றும். ஆகவே, பார்வைக்கும் தொகுப்பாளருக்கும் இடையிலான தகவல்தொடர்புகளை சோதிக்க முறை அழைப்புகளை கேலி செய்வதை விட இரண்டு பொருள்களை ஒப்பிடுவதன் மூலம் தரவின் மாற்றங்களைப் பார்ப்பதன் மூலம் நாம் சோதிக்க முடியும்.

சோசலிஸ்ட் கட்சி: உருப்படிக்கு நிறைய புதுப்பிப்புகளைச் செய்தேன். எனவே இதை மூன்று பகுதிகளாகப் பிரிப்பது அவசியம். மூன்றாம் பகுதியை இங்கே படிக்கலாம்.

பகுதி இரண்டு இங்கே முடிகிறது. அனைத்து கருத்துக்களும் வரவேற்கப்படுகின்றன. மூன்றாம் பகுதி VIPER, VIP, Reactive Programming, Trade-Offs, கட்டுப்பாடுகள் மற்றும் சூழ்நிலை உணர்வு பற்றியது.

படித்ததற்கு நன்றி! இந்த கட்டுரையை நீங்கள் ரசித்திருந்தால், தயவுசெய்து கைதட்டல் அதனால் மற்றவர்களும் இதைப் படிக்கலாம் :)