எம்விசி கட்டிடக்கலை அறிமுகம்
ஒவ்வொரு புரோகிராமருக்கும் தெரிந்த மிகவும் பிரபலமான பயன்பாட்டு கட்டமைப்பு MVC ஆகும் . MVC என்பது மாடல்-வியூ-கண்ட்ரோலர் என்பதைக் குறிக்கிறது .
இது பயன்பாட்டுக் கூறுகளின் கட்டமைப்பைப் போல பயன்பாடுகளின் கட்டமைப்பு அல்ல, ஆனால் நாங்கள் பின்னர் இந்த நுணுக்கத்திற்குத் திரும்புவோம். MVC என்றால் என்ன?
MVC என்பது பயன்பாட்டுத் தரவு மற்றும் கட்டுப்பாட்டு தர்க்கத்தை மூன்று தனித்தனி கூறுகளாகப் பிரிப்பதற்கான ஒரு திட்டமாகும் - மாதிரி, பார்வை மற்றும் கட்டுப்படுத்தி - இதனால் ஒவ்வொரு கூறுகளையும் சுயாதீனமாக மாற்ற முடியும்.
- மாதிரி (மாடல்) தரவை வழங்குகிறது மற்றும் அதன் நிலையை மாற்றுவதன் மூலம் கட்டுப்படுத்தி கட்டளைகளுக்கு பதிலளிக்கிறது.
- மாதிரி மாற்றங்களுக்குப் பதிலளிக்கும் வகையில் பயனருக்கு மாதிரித் தரவைக் காண்பிப்பதற்கு காட்சி பொறுப்பாகும்.
- கன்ட்ரோலர் (கண்ட்ரோலர்) பயனரின் செயல்களை விளக்குகிறது, மாற்றங்களின் தேவையின் மாதிரியை அறிவிக்கிறது.
இந்த மாதிரி 1978 (!) ஆண்டில் மீண்டும் கண்டுபிடிக்கப்பட்டது. ஆம், சரியான மென்பொருள் கட்டமைப்பில் உள்ள சிக்கல்கள் 50 ஆண்டுகளுக்கு முன்பு பொருத்தமானவை. அசல் வரைபடத்தில் இந்த மாதிரி எவ்வாறு விவரிக்கப்பட்டுள்ளது என்பது இங்கே:
![எம்விசி கட்டிடக்கலை அறிமுகம்](https://cdn.codegym.cc/images/article/f0c1243a-0dbc-445d-9cff-fe34276351af/original.jpeg)
மாதிரியானது அவர்களுடன் பணிபுரியும் தரவு மற்றும் முறைகளை வழங்குகிறது: தரவுத்தளத்திற்கான வினவல்கள், சரியானதைச் சரிபார்க்கிறது. மாதிரியானது பார்வையில் இருந்து சுயாதீனமாக உள்ளது (தரவை எவ்வாறு வழங்குவது என்று தெரியவில்லை) மற்றும் கட்டுப்படுத்தி (பயனர் தொடர்பு புள்ளிகள் இல்லை), தரவு அணுகல் மற்றும் நிர்வாகத்தை வழங்குகிறது.
மாதிரியானது அதன் நிலையை மாற்றுவதன் மூலம் கோரிக்கைகளுக்கு பதிலளிக்கும் வகையில் கட்டப்பட்டுள்ளது, மேலும் "பார்வையாளர்களின்" அறிவிப்பை உள்ளமைக்க முடியும். மாதிரியானது, காட்சிப் பிரதிநிதித்துவத்திலிருந்து சுதந்திரமாக இருப்பதால், ஒரு "மாடலுக்கு" பல வேறுபட்ட பிரதிநிதித்துவங்களைக் கொண்டிருக்கலாம் .
மாதிரியிலிருந்து தேவையான தரவைப் பெறுவதற்கும், அதை பயனருக்கு அனுப்புவதற்கும் பார்வை பொறுப்பு. பார்வையானது பயனர் உள்ளீட்டைச் செயல்படுத்தாது.
கட்டுப்படுத்தி பயனர் மற்றும் கணினி இடையே "தொடர்பு" வழங்குகிறது. பயனரிடமிருந்து கணினிக்கு தரவைக் கட்டுப்படுத்துகிறது மற்றும் வழிநடத்துகிறது. விரும்பிய செயலைச் செயல்படுத்த ஒரு மாதிரி மற்றும் பார்வையைப் பயன்படுத்துகிறது.
இந்த மாதிரி பல தசாப்தங்களாக சிறிது சிறிதாக உருவாகியுள்ளது என்பதில் ஒரு குறிப்பிட்ட சிரமம் உள்ளது. அதாவது, பெயர் அப்படியே இருந்தது, ஆனால் பகுதிகளின் நோக்கம் மாறத் தொடங்கியது.
இணையத்தில் MVC கட்டமைப்பு
MVC வடிவமைப்பு முறையின் பின்னணியில் உள்ள யோசனை மிகவும் எளிமையானது: எங்கள் பயன்பாடுகளில் வெவ்வேறு நடத்தைகளுக்கான பொறுப்பை நாம் தெளிவாகப் பிரிக்க வேண்டும்:
மாதிரி- தரவு செயலாக்கம் மற்றும் பயன்பாட்டு தர்க்கம்.
பார்வை— ஆதரிக்கப்படும் எந்த வடிவத்திலும் பயனருக்கு தரவை வழங்குதல்.
கட்டுப்படுத்தி- பயனர் கோரிக்கைகளை செயலாக்குதல் மற்றும் பொருத்தமான ஆதாரங்களை அழைக்கவும்.
பயன்பாடு மூன்று முக்கிய கூறுகளாக பிரிக்கப்பட்டுள்ளது, ஒவ்வொன்றும் வெவ்வேறு பணிகளுக்கு பொறுப்பாகும். ஒரு எடுத்துக்காட்டைப் பயன்படுத்தி கிளையன்ட்-சர்வர் பயன்பாட்டின் கூறுகளை இன்னும் விரிவாகப் பார்ப்போம்.
கட்டுப்படுத்தி
உலாவியில் உள்ள பக்கத்தில் உள்ள பல்வேறு கூறுகளை பயனர் கிளிக் செய்கிறார், இதன் விளைவாக உலாவி பல்வேறு HTTP கோரிக்கைகளை அனுப்புகிறது: GET, POST அல்லது பிற. பக்கத்தின் உள்ளே செயல்படும் உலாவி மற்றும் JS குறியீட்டை கட்டுப்படுத்தி சேர்க்கலாம்.
இந்த வழக்கில் கட்டுப்படுத்தியின் முக்கிய செயல்பாடு, தேவையான பொருள்களில் முறைகளை அழைப்பது, பயனரால் குறிப்பிடப்பட்ட பணிகளைச் செய்வதற்கான ஆதாரங்களுக்கான அணுகலை நிர்வகித்தல். பொதுவாக, கட்டுப்படுத்தி பணிக்கான பொருத்தமான மாதிரியை அழைக்கிறது மற்றும் பொருத்தமான காட்சியைத் தேர்ந்தெடுக்கிறது.
மாதிரி
ஒரு பரந்த பொருளில் மாதிரி என்பது தரவுகளுடன் பணிபுரியப் பயன்படுத்தப்படும் தரவு மற்றும் விதிகள் ஆகும் - ஒன்றாக அவை பயன்பாட்டின் வணிக தர்க்கத்தை உருவாக்குகின்றன. ஒரு பயன்பாட்டை வடிவமைத்தல் எப்போதும் அது செயல்படும் பொருட்களின் மாதிரிகளை உருவாக்குவதன் மூலம் தொடங்குகிறது.
புத்தகங்களை விற்கும் ஆன்லைன் ஸ்டோர் எங்களிடம் உள்ளது என்று வைத்துக் கொள்வோம், அப்படியானால், ஒருவர் பயன்பாட்டுப் பயனாளியா அல்லது புத்தகத்தின் ஆசிரியரா? இந்த முக்கியமான கேள்விகள் மாதிரி வடிவமைப்பின் போது கவனிக்கப்பட வேண்டும்.
மேலும் விதிகளின் தொகுப்புகள் உள்ளன: என்ன செய்ய முடியும், என்ன செய்ய முடியாது, எந்த தரவுத் தொகுப்புகள் ஏற்கத்தக்கவை மற்றும் எது இல்லை. ஆசிரியர் இல்லாமல் ஒரு புத்தகம் இருக்க முடியுமா? மற்றும் புத்தகங்கள் இல்லாத ஆசிரியர்? பயனரின் பிறந்த தேதி 300 ஆம் ஆண்டாக இருக்க முடியுமா மற்றும் பல.
பயனர் கோரிய தரவு (செய்தி, புத்தகப் பக்கம், படங்கள் போன்றவை) மாடல் கட்டுப்படுத்திக்கு வழங்குகிறது. பயனருக்கு நாம் அதை எவ்வாறு வழங்க விரும்பினாலும் தரவு மாதிரி ஒரே மாதிரியாக இருக்கும். எனவே, தரவைக் காண்பிக்க, கிடைக்கக்கூடிய எந்தக் காட்சியையும் நாங்கள் தேர்வு செய்கிறோம்.
மாடலில் எங்கள் பயன்பாட்டு தர்க்கத்தின் மிக முக்கியமான பகுதி உள்ளது , நாங்கள் கையாளும் சிக்கலைத் தீர்க்கும் தர்க்கம் (மன்றம், கடை, வங்கி போன்றவை). கன்ட்ரோலரில் பெரும்பாலும் பயன்பாட்டிற்கான நிறுவன தர்க்கம் உள்ளது (உங்கள் திட்ட மேலாளரைப் போலவே).
காண்க
மாதிரியிலிருந்து பெறப்பட்ட தரவைப் பிரதிநிதித்துவப்படுத்த பல்வேறு வழிகளை View வழங்குகிறது. இது தரவுகளால் நிரப்பப்பட்ட டெம்ப்ளேட்டாக இருக்கலாம். பல்வேறு பார்வைகள் இருக்கலாம் மற்றும் தற்போதைய சூழ்நிலைக்கு எது சிறந்தது என்பதை கட்டுப்படுத்தி தேர்வு செய்யும்.
ஒரு வலை பயன்பாடு பொதுவாக கட்டுப்படுத்திகள், மாதிரிகள் மற்றும் காட்சிகளின் தொகுப்பைக் கொண்டுள்ளது. கன்ட்ரோலர் பின்தளத்தில் மட்டுமே இருக்க முடியும், ஆனால் அதன் தர்க்கம் முன்பகுதியிலும் பரவும்போது, பல கட்டுப்படுத்திகளின் மாறுபாடும் இருக்கலாம். இந்த அணுகுமுறைக்கு ஒரு சிறந்த உதாரணம் எந்த மொபைல் பயன்பாடும் ஆகும்.
இணையத்தில் MVC உதாரணம்
புத்தகங்களை விற்கும் ஆன்லைன் ஸ்டோரை நீங்கள் உருவாக்க வேண்டும் என்று வைத்துக்கொள்வோம். பயனர் பின்வரும் செயல்களைச் செய்யலாம்: புத்தகங்களைப் பார்க்கவும், பதிவு செய்யவும், வாங்கவும், தற்போதைய வரிசையில் பொருட்களைச் சேர்க்கவும், அவர் விரும்பும் புத்தகங்களைக் குறிக்கவும் அவற்றை வாங்கவும்.
உங்கள் பயன்பாட்டில் அனைத்து வணிக தர்க்கங்களுக்கும் பொறுப்பான மாதிரி இருக்க வேண்டும் . உங்களுக்கு ஒரு கட்டுப்படுத்தி தேவை , அது அனைத்து பயனர் செயல்களையும் செயல்படுத்தி, வணிக தர்க்கத்திலிருந்து முறை அழைப்புகளாக மாற்றும். இருப்பினும், ஒரு கட்டுப்படுத்தி முறை பல்வேறு மாதிரி முறைகளை அழைக்கலாம்.
உங்களுக்கு பார்வைகளின் தொகுப்பும் தேவை: புத்தகங்களின் பட்டியல், ஒரு புத்தகத்தைப் பற்றிய தகவல்கள், ஒரு வணிக வண்டி, ஆர்டர்களின் பட்டியல். ஒரு வலை பயன்பாட்டின் ஒவ்வொரு பக்கமும் ஒரு தனித்தனி காட்சியாகும், இது மாதிரியின் ஒரு குறிப்பிட்ட அம்சத்தை பயனருக்கு காண்பிக்கும்.
தலைப்புகளைக் காண, புத்தகக் கடையில் பரிந்துரைக்கப்பட்ட புத்தகங்களின் பட்டியலைப் பயனர் திறந்தால் என்ன நடக்கும் என்று பார்ப்போம். செயல்களின் முழு வரிசையையும் 6 படிகளின் வடிவத்தில் விவரிக்கலாம்:
![இணையத்தில் MVC உதாரணம்](https://cdn.codegym.cc/images/article/a7f52906-62ff-44d9-8cb4-3357b5b9fe63/800.jpeg)
படிகள்:
- பயனர் "பரிந்துரைக்கப்பட்ட" இணைப்பைக் கிளிக் செய்தால், உலாவி /புத்தகங்கள்/பரிந்துரைகளுக்கு ஒரு கோரிக்கையை அனுப்புகிறது.
- கட்டுப்படுத்தி கோரிக்கையை சரிபார்க்கிறது : பயனர் உள்நுழைந்திருக்க வேண்டும். அல்லது உள்நுழையாத பயனர்களுக்கான புத்தகங்களின் தொகுப்புகளை எங்களிடம் வைத்திருக்க வேண்டும். கட்டுப்படுத்தி பின்னர் மாதிரியை அழைத்து, N பயனருக்கு பரிந்துரைக்கப்பட்ட புத்தகங்களின் பட்டியலைத் திருப்பித் தருமாறு கேட்கிறது.
- மாதிரி தரவுத்தளத்தை அணுகுகிறது, அங்கிருந்து புத்தகங்கள் பற்றிய தகவல்களை மீட்டெடுக்கிறது: தற்போது பிரபலமான புத்தகங்கள், பயனர் வாங்கிய புத்தகங்கள், அவரது நண்பர்கள் வாங்கிய புத்தகங்கள், அவரது விருப்பப்பட்டியலில் இருந்து புத்தகங்கள். இந்தத் தரவின் அடிப்படையில், மாடல் பரிந்துரைக்கப்பட்ட 10 புத்தகங்களின் பட்டியலை உருவாக்கி அவற்றைக் கட்டுப்படுத்திக்குத் திருப்பித் தருகிறது.
- கட்டுப்படுத்தி பரிந்துரைக்கப்பட்ட புத்தகங்களின் பட்டியலைப் பெற்று அதைப் பார்க்கிறது. இந்த கட்டத்தில், கட்டுப்படுத்தி முடிவுகளை எடுக்கிறது! சில புத்தகங்கள் இருந்தால் அல்லது பட்டியல் முற்றிலும் காலியாக இருந்தால், அது பதிவு செய்யப்படாத பயனருக்கு புத்தகங்களின் பட்டியலைக் கோருகிறது. தற்சமயம் விளம்பரம் நடந்து கொண்டிருந்தால், கன்ட்ரோலர் விளம்பரப் புத்தகங்களை பட்டியலில் சேர்க்கலாம்.
- பயனருக்கு எந்தப் பக்கத்தைக் காட்ட வேண்டும் என்பதை கட்டுப்படுத்தி தீர்மானிக்கிறது. இது ஒரு பிழைப் பக்கமாக இருக்கலாம், புத்தகங்களின் பட்டியலைக் கொண்ட ஒரு பக்கம், பயனர் மில்லியன் பார்வையாளராகிவிட்டதை வாழ்த்தும் பக்கம்.
- கன்ட்ரோலரால் தேர்ந்தெடுக்கப்பட்ட பக்கத்தை ( பார்வை ) சேவையகம் கிளையண்டிற்கு வழங்குகிறது . இது தேவையான தரவு (பயனர் பெயர், புத்தகங்களின் பட்டியல்) நிரப்பப்பட்டு கிளையண்டிற்கு செல்கிறது.
- கிளையன்ட் பக்கத்தைப் பெற்று பயனருக்குக் காண்பிக்கும்.
இந்த அணுகுமுறையின் நன்மைகள் என்ன?
MVC கான்செப்ட்டைப் பயன்படுத்துவதால் நமக்குக் கிடைக்கும் மிகத் தெளிவான நன்மை, விளக்கக்காட்சி தர்க்கம் (பயனர் இடைமுகம்) மற்றும் பயன்பாட்டு தர்க்கம் (பின்னணி) ஆகியவற்றின் தெளிவான பிரிப்பு ஆகும்.
இரண்டாவது நன்மை, சர்வர் பகுதியை இரண்டாகப் பிரிப்பது: ஸ்மார்ட் மாடல் ( எக்ஸிகியூட்டர் ) மற்றும் ஒரு கட்டுப்படுத்தி ( முடிவு மையம் ).
முந்தைய எடுத்துக்காட்டில், மாதிரியிலிருந்து பரிந்துரைக்கப்பட்ட புத்தகங்களின் வெற்று பட்டியலை கட்டுப்படுத்தி பெற்று, அதை என்ன செய்வது என்று தீர்மானிக்கும் தருணம் இருந்தது. கோட்பாட்டளவில், இந்த தர்க்கத்தை நேரடியாக மாதிரியில் வைக்கலாம்.
முதலில், பரிந்துரைக்கப்பட்ட புத்தகங்களைக் கோரும்போது, பட்டியல் காலியாக இருந்தால் என்ன செய்ய வேண்டும் என்பதை மாதிரி தீர்மானிக்கும். பின்னர் நான் அதே இடத்தில் குறியீட்டைச் சேர்க்க வேண்டும், இப்போது பதவி உயர்வு நடந்தால் என்ன செய்வது, பின்னர் பல வேறுபட்ட விருப்பங்கள்.
விளம்பரம் இல்லாமல் பயனரின் பக்கம் எப்படி இருக்கும் என்பதை கடை நிர்வாகி பார்க்க விரும்பினார் அல்லது நேர்மாறாக, இப்போது எந்த விளம்பரமும் இல்லை, ஆனால் எதிர்கால விளம்பரம் எவ்வாறு காண்பிக்கப்படும் என்பதை அவர் பார்க்க விரும்புகிறார். மேலும் இதற்கான முறைகள் இல்லை. எனவே, வணிக தர்க்கத்திலிருந்து (மாதிரி) முடிவு மையத்தை (கட்டுப்படுத்தி) பிரிக்க முடிவு செய்யப்பட்டது.
பயன்பாட்டு தர்க்கத்திலிருந்து பார்வைகளை தனிமைப்படுத்துவதுடன், MVC கருத்து பெரிய பயன்பாடுகளின் சிக்கலை வெகுவாகக் குறைக்கிறது. குறியீடு மிகவும் கட்டமைக்கப்பட்டுள்ளது, இது தீர்வுகளை பராமரிப்பது, சோதிப்பது மற்றும் மீண்டும் பயன்படுத்துவதை எளிதாக்குகிறது.
MVC இன் கருத்தைப் புரிந்துகொண்டு, ஒரு டெவலப்பராக, புத்தகங்களின் பட்டியலை வரிசைப்படுத்த நீங்கள் எங்கு சேர்க்க வேண்டும் என்பதை உணருங்கள்:
- தரவுத்தள வினவல் மட்டத்தில்.
- வணிக தர்க்கத்தின் (மாதிரி) மட்டத்தில்.
- வணிக தர்க்க மட்டத்தில் (கட்டுப்படுத்தி).
- பார்வையில் - வாடிக்கையாளர் பக்கத்தில்.
மேலும் இது சொல்லாட்சிக் கேள்வி அல்ல. புத்தகங்களின் பட்டியலை வரிசைப்படுத்துவதற்கான குறியீட்டை எங்கே, ஏன் சேர்க்க வேண்டும் என்று இப்போதே யோசித்துப் பாருங்கள்.
கிளாசிக் எம்விசி மாடல்
MVC கூறுகளுக்கிடையேயான தொடர்பு இணைய பயன்பாடுகள் மற்றும் மொபைல் பயன்பாடுகளில் வித்தியாசமாக செயல்படுத்தப்படுகிறது. ஏனென்றால், வலைப் பயன்பாடு குறுகிய காலமாக இருப்பதால், ஒரு பயனர் கோரிக்கையைச் செயல்படுத்தி வெளியேறுகிறது, அதே நேரத்தில் மொபைல் பயன்பாடு மறுதொடக்கம் செய்யாமல் பல கோரிக்கைகளைச் செயல்படுத்துகிறது.
வலை பயன்பாடுகள் பொதுவாக "செயலற்ற" மாதிரியைப் பயன்படுத்துகின்றன, மொபைல் பயன்பாடுகள் "செயலில்" மாதிரியைப் பயன்படுத்துகின்றன. செயலில் உள்ள மாதிரி, செயலற்ற ஒன்றைப் போலல்லாமல், அதில் உள்ள மாற்றங்களின் அறிவிப்புகளைப் பதிவுசெய்து பெற உங்களை அனுமதிக்கிறது. இணைய பயன்பாடுகளுக்கு இது தேவையில்லை.
பல்வேறு மாதிரிகளில் உள்ள கூறுகளின் தொடர்பு இப்படித்தான் இருக்கும்:
![கிளாசிக் எம்விசி மாடல்](https://cdn.codegym.cc/images/article/08f6a9ed-262d-4930-ac41-b9d8fe23027f/1024.jpeg)
மொபைல் பயன்பாடுகள் (செயலில் உள்ள மாதிரி) நிகழ்வுகள் மற்றும் நிகழ்வு சந்தா பொறிமுறையை தீவிரமாகப் பயன்படுத்துகின்றன . இந்த அணுகுமுறையுடன், காட்சி ( பார்வை ) மாதிரி மாற்றங்களுக்கு குழுசேரும். பின்னர், சில நிகழ்வுகள் நிகழும்போது (எடுத்துக்காட்டாக, பயனர் ஒரு பொத்தானைக் கிளிக் செய்தால்), கட்டுப்படுத்தி அழைக்கப்படுகிறது . இது மாதிரிக்கு தரவை மாற்றுவதற்கான கட்டளையையும் வழங்குகிறது .
சில தரவு மாறியிருந்தால், இந்தத் தரவை மாற்றுவது குறித்த நிகழ்வை மாதிரி உருவாக்குகிறது. இந்த நிகழ்விற்கு குழுசேர்ந்த அனைத்து பார்வைகளும் (இந்த குறிப்பிட்ட தரவை மாற்றுவது முக்கியம்) இந்த நிகழ்வைப் பெற்று அவற்றின் இடைமுகத்தில் தரவைப் புதுப்பிக்கவும்.
வலை பயன்பாடுகளில், விஷயங்கள் கொஞ்சம் வித்தியாசமாக ஒழுங்கமைக்கப்படுகின்றன. முக்கிய தொழில்நுட்ப வேறுபாடு என்னவென்றால், சேவையகத்தின் முன்முயற்சியில் கிளையன்ட் சேவையக பக்க செய்திகளைப் பெற முடியாது .
எனவே, வலைப் பயன்பாட்டில் உள்ள ஒரு கட்டுப்படுத்தி பொதுவாக பார்வைக்கு எந்த செய்தியையும் அனுப்பாது, ஆனால் கிளையண்டிற்கு ஒரு புதிய பக்கத்தை வழங்குகிறது, இது தொழில்நுட்ப ரீதியாக ஒரு புதிய பார்வை அல்லது புதிய கிளையன்ட் பயன்பாடு (ஒரு பக்கம் மற்றதைப் பற்றி எதுவும் தெரியாவிட்டால்) .
தற்போது, இந்த சிக்கல் பின்வரும் அணுகுமுறைகளைப் பயன்படுத்தி ஓரளவு தீர்க்கப்படுகிறது:
- முக்கியமான தரவுகளில் (நிமிடத்திற்கு ஒருமுறை அல்லது அதற்கு மேற்பட்ட முறை) மாற்றங்களைச் செய்ய சர்வரில் தவறாமல் வாக்களிக்கவும்.
- WebSockets ஒரு கிளையன்ட் சேவையக செய்திகளுக்கு குழுசேர அனுமதிக்கிறது.
- சர்வர் பக்கத்திலிருந்து வலை புஷ் அறிவிப்புகள்.
- HTTP/2 நெறிமுறையானது கிளையண்டிற்கு செய்திகளை அனுப்புவதற்கு சேவையகத்தை அனுமதிக்கிறது.