உங்கள் Controller அதிக வேலைகளைச் செய்கிறது
உங்கள் controller-ஐத் திறக்கவும். உங்கள் store method-ஐப் பார்க்கவும்.
அதில் 40 வரிகள் குறியீடு (code) உள்ளதா? அது ஒரு பெரிய validation block-உடன் தொடங்கி, அதைத் தொடர்ந்து பல if statements, பிறகு business logic, மற்றும் இறுதியில் ஒரு return-உடன் முடிகிறதா?
உங்கள் controller அதன் வேலை அல்லாத மற்ற வேலைகளையும் செய்கிறது.
ஒரு controller-க்கு ஒரு எளிய பணி மட்டுமே உள்ளது. அது ஒரு request-ஐப் பெற்றுக்கொண்டு, அந்தப் பிரச்சனையைத் தீர்க்க ஒரு service-ஐ அழைத்து, ஒரு response-ஐத் திருப்பித் தருகிறது. இதை ஒரு வெயிட்டராக (waiter) நினைத்துக் கொள்ளுங்கள். ஒரு வெயிட்டர் உங்கள் உணவைக் கொண்டு வருவார், ஆனால் அதைச் சமைக்க மாட்டார்.
நீங்கள் validation, authorization மற்றும் data processing ஆகியவற்றை ஒரு controller-க்குள் வைக்கும்போது, அது குழப்பமடைகிறது. இறுதியில் யாரும் தொட விரும்பாத ஒரு 80-வரிęல் கொண்ட ராட்சத குறியீடாக (monster) அது மாறிவிடும்.
Laravel-இல் இதற்கென ஒரு built-in தீர்வு உள்ளது: Form Requests.
ஒவ்வொரு method-லும் validation மற்றும் authorization logic-ஐத் திரும்பத் திரும்பச் செய்வதைத் தவிர்க்கவும். Single Responsibility Principle-ஐப் பயன்படுத்தவும். ஒரு class-க்கு மாற்றம் செய்ய ஒரே ஒரு காரணம் மட்டுமே இருக்க வேண்டும். request flow மாறும்போது மட்டுமே ஒரு controller மாற வேண்டும். ஒரு validation rule மாறுவதற்காக மட்டும் அது மாறக்கூடாது.
ஒரு பிரத்யேக request class-ஐ உருவாக்க இந்த command-ஐ இயக்கவும்: php artisan make:request StorePostRequest
உங்கள் logic-ஐ இந்த புதிய class-க்குள் மாற்றவும். ஒரு Form Request மூன்று முக்கிய விஷயங்களைக் கையாள்கிறது:
• Authorization: ஒரு பயனர் ஒரு செயலைச் செய்ய முடியுமா என்பதைத் தீர்மானிக்க authorize method-ஐப் பயன்படுத்தவும். அது false எனத் திரும்ப அளித்தால், Laravel தானாகவே 403 error-ஐ அனுப்பும்.
• Validation: உங்கள் தரவுத் தேவைகளை (data requirements) வரையறுக்க rules method-ஐப் பயன்படுத்தவும்.
• Data Preparation: validation தொடங்குவதற்கு முன் தரவைச் சுத்தப்படுத்த அல்லது மாற்ற prepareForValidation-ஐப் பயன்படுத்தவும். இது slugs உருவாக்குவதற்கோ அல்லது தொலைபேசி எண்களைச் சீரமைப்பதற்கோ (normalizing) மிகவும் ஏற்றது.
இந்த logic-ஐ மாற்றிய பிறகு, உங்கள் controller சுருங்கிவிடும். அது இப்படி இருக்கலாம்:
public function store(StorePostRequest $request) { $post = Post::create($request->validated()); return redirect()->route('posts.show', $post); }
அவ்வளவுதான். இரண்டு வரிகள்.
method தொடங்குவதற்கு முன்பே Laravel validation மற்றும் authorization-ஐச் செய்வதால், controller சுருக்கமாகவும் நேர்த்தியாகவும் (lean) இருக்கும். தரவு தவறாக இருந்தால், பயனர் உடனடியாக ஒரு error-ஐப் பெறுவார்.
ஒரு எச்சரிக்கை. எல்லாவற்றிற்கும் Form Requests-ஐப் பயன்படுத்த வேண்டாம். ஒரு சிறிய field கொண்ட மிகச் சிறிய route இருந்தால், validation-ஐ inline-லேயே வைத்திருக்கவும். logic வளரும்போது, திரும்பத் திரும்ப வரும்போது அல்லது permissions சம்பந்தப்பட்டதாக இருக்கும்போது மட்டும் Form Requests-ஐப் பயன்படுத்தவும்.
மேலும், business logic-ஐ Form Request-க்குள் வைக்க வேண்டாம். கணக்கீடுகள் (Calculations) மற்றும் database updates ஆகியவை ஒரு Service layer-இல் இருக்க வேண்டும்.
இன்று உங்கள் மிகவும் குழப்பமான controller-ஐக் கண்டறியுங்கள். validation-ஐ ஒரு Form Request-ஆக மாற்றவும். அது சுருங்குவதைப் பார்க்கவும்.
நீங்கள் பார்த்ததிலேயே மிகப்பெரிய store method எது? கருத்துக்களில் (comments) என்னிடம் சொல்லுங்கள்.
Source: https://dev.to/denisgusto1/seu-controller-ta-fazendo-o-trabalho-do-form-request-e-ele-nao-devia-512o
