ನಿಮ್ಮ ಕಂಟ್ರೋಲರ್ ಅತಿಯಾದ ಕೆಲಸ ಮಾಡುತ್ತಿದೆ

ನಿಮ್ಮ ಕಂಟ್ರೋಲರ್ ಅನ್ನು ತೆರೆಯಿರಿ. ನಿಮ್ಮ store ಮೆಥಡ್ ಅನ್ನು ಗಮನಿಸಿ.

ಅದರಲ್ಲಿ 40 ಸಾಲುಗಳ ಕೋಡ್ ಇದೆಯೇ? ಅದು ದೊಡ್ಡ ವ್ಯಾಲಿಡೇಶನ್ ಬ್ಲಾಕ್‌ನಿಂದ ಪ್ರಾರಂಭವಾಗಿ, ನಂತರ ಹಲವಾರು if ಸ್ಟೇಟ್‌ಮೆಂಟ್‌ಗಳು, ನಂತರ ಬಿಸಿನೆಸ್ ಲಾಜಿಕ್ ಮತ್ತು ಕೊನೆಯಲ್ಲಿ ರಿಟರ್ನ್ ಆಗಿದೆಯೇ?

ನಿಮ್ಮ ಕಂಟ್ರೋಲರ್ ತನ್ನ ಕೆಲಸವಲ್ಲದ ಕೆಲಸವನ್ನು ಮಾಡುತ್ತಿದೆ.

ಕಂಟ್ರೋಲರ್ ಒಂದೇ ಒಂದು ಸರಳ ಪಾತ್ರವನ್ನು ಹೊಂದಿದೆ. ಅದು ರಿಕ್ವೆಸ್ಟ್ ಅನ್ನು ಸ್ವೀಕರಿಸುತ್ತದೆ, ಸಮಸ್ಯೆಯನ್ನು ಪರಿಹರಿಸಲು ಸರ್ವಿಸ್ ಅನ್ನು ಕರೆಯುತ್ತದೆ ಮತ್ತು ರೆಸ್ಪಾನ್ಸ್ ಅನ್ನು ಹಿಂತಿರುಗಿಸುತ್ತದೆ. ಇದನ್ನು ಒಬ್ಬ ವೇಟರ್‌ನಂತೆ ಭಾವಿಸಿ. ವೇಟರ್ ನಿಮ್ಮ ಆಹಾರವನ್ನು ತರುತ್ತಾರೆ, ಆದರೆ ಅವರು ಅದನ್ನು ಅಡುಗೆ ಮಾಡುವುದಿಲ್ಲ.

ನೀವು ವ್ಯಾಲಿಡೇಶನ್, ಅಥರೈಸೇಶನ್ ಮತ್ತು ಡೇಟಾ ಪ್ರೊಸೆಸಿಂಗ್ ಅನ್ನು ಕಂಟ್ರೋಲರ್ ಒಳಗಡೆ ಇರಿಸಿದಾಗ, ಅದು ಗೊಂದಲಮಯವಾಗುತ್ತದೆ. ಅಂತಿಮವಾಗಿ ಯಾರೂ ಮುಟ್ಟಲು ಬಯಸದ 80 ಸಾಲುಗಳ ಬೃಹತ್ ಕೋಡ್ (monster) ನಿಮ್ಮ ಕೈಗೆ ಸಿಗುತ್ತದೆ.

Laravel ನಲ್ಲಿ ಇದಕ್ಕೆ ಒಂದು ಅಂತರ್ನಿರ್ಮಿತ ಪರಿಹಾರವಿದೆ: Form Requests.

ಪ್ರತಿಯೊಂದು ಮೆಥಡ್‌ನಲ್ಲಿ ವ್ಯಾಲಿಡೇಶನ್ ಮತ್ತು ಅಥರೈಸೇಶನ್ ಲಾಜಿಕ್ ಅನ್ನು ಪುನರಾವರ್ತಿಸುವುದನ್ನು ನಿಲ್ಲಿಸಿ. Single Responsibility Principle ಅನ್ನು ಬಳಸಿ. ಒಂದು ಕ್ಲಾಸ್ ಬದಲಾಗಲು ಕೇವಲ ಒಂದು ಕಾರಣವಿದ್ದಾಗಬೇಕು. ರಿಕ್ವೆಸ್ಟ್ ಫ್ಲೋ ಬದಲಾದಾಗ ಕಂಟ್ರೋಲರ್ ಬದಲಾಗಬೇಕು. ಕೇವಲ ವ್ಯಾಲಿಡೇಶನ್ ರೂಲ್ ಬದಲಾದ ಕಾರಣಕ್ಕಾಗಿ ಅದು ಬದಲಾಗಬಾರದು.

ಈ ಪ್ರತ್ಯೇಕ ರಿಕ್ವೆಸ್ಟ್ ಕ್ಲಾಸ್ ಅನ್ನು ರಚಿಸಲು ಈ ಕಮಾಂಡ್ ಅನ್ನು ರನ್ ಮಾಡಿ: php artisan make:request StorePostRequest

ನಿಮ್ಮ ಲಾಜಿಕ್ ಅನ್ನು ಈ ಹೊಸ ಕ್ಲಾಸ್‌ಗೆ ವರ್ಗಾಯಿಸಿ. Form Request ಮೂರು ಮುಖ್ಯ ವಿಷಯಗಳನ್ನು ನಿರ್ವಹಿಸುತ್ತದೆ:

• Authorization: ಬಳಕೆದಾರರು ಒಂದು ಕ್ರಿಯೆಯನ್ನು ಮಾಡಬಹುದೇ ಎಂದು ನಿರ್ಧರಿಸಲು authorize ಮೆಥಡ್ ಅನ್ನು ಬಳಸಿ. ಇದು false ಅನ್ನು ರಿಟರ್ನ್ ಮಾಡಿದರೆ, Laravel ಸ್ವಯಂಚಾಲಿತವಾಗಿ 403 ಎರರ್ ಅನ್ನು ಕಳುಹಿಸುತ್ತದೆ.

• Validation: ನಿಮ್ಮ ಡೇಟಾ ಅವಶ್ಯಕತೆಗಳನ್ನು ವ್ಯಾಖ್ಯಾನಿಸಲು rules ಮೆಥಡ್ ಅನ್ನು ಬಳಸಿ.

• Data Preparation: ವ್ಯಾಲಿಡೇಶನ್ ನಡೆಯುವ ಮೊದಲು ಡೇಟಾವನ್ನು ಕ್ಲೀನ್ ಮಾಡಲು ಅಥವಾ ಪರಿವರ್ತಿಸಲು prepareForValidation ಅನ್ನು ಬಳಸಿ. ಇದು ಸ್ಲಗ್‌ಗಳನ್ನು (slugs) ರಚಿಸಲು ಅಥವಾ ಫೋನ್ ಸಂಖ್ಯೆಗಳನ್ನು ನಾರ್ಮಲೈಸ್ ಮಾಡಲು ಸೂಕ್ತವಾಗಿದೆ.

ಒಮ್ಮೆ ನೀವು ಈ ಲಾಜಿಕ್ ಅನ್ನು ವರ್ಗಾಯಿಸಿದರೆ, ನಿಮ್ಮ ಕಂಟ್ರೋಲರ್ ಚಿಕ್ಕದಾಗುತ್ತದೆ. ಅದು ಹೀಗೆ ಕಾಣಿಸಬಹುದು:

public function store(StorePostRequest $request) { $post = Post::create($request->validated()); return redirect()->route('posts.show', $post); }

ಅಷ್ಟೇ. ಕೇವಲ ಎರಡು ಸಾಲುಗಳು.

ಕಂಟ್ರೋಲರ್ ಲೀನ್ ಆಗಿರುತ್ತದೆ ಏಕೆಂದರೆ ಮೆಥಡ್ ಪ್ರಾರಂಭವಾಗುವ ಮೊದಲೇ Laravel ವ್ಯಾಲಿಡೇಶನ್ ಮತ್ತು ಅಥರೈಸೇಶನ್ ಅನ್ನು ರನ್ ಮಾಡುತ್ತದೆ. ಡೇಟಾ ತಪ್ಪಾಗಿದ್ದರೆ, ಬಳಕೆದಾರರಿಗೆ ತಕ್ಷಣವೇ ಎರರ್ ಸಿಗುತ್ತದೆ.

ಒಂದು ಎಚ್ಚರಿಕೆ. ಎಲ್ಲದಕ್ಕೂ Form Requests ಬಳಸಬೇಡಿ. ನಿಮಗೆ ಒಂದು ಸರಳ ಫೀಲ್ಡ್ ಇರುವ ಸಣ್ಣ ರೂಟ್ ಇದ್ದರೆ, ವ್ಯಾಲಿಡೇಶನ್ ಅನ್ನು ಇನ್‌ಲೈನ್ ಆಗಿಯೇ ಇರಿಸಿ. ಲಾಜಿಕ್ ಬೆಳೆದಾಗ, ಪುನರಾವರ್ತನೆಯಾದಾಗ ಅಥವಾ ಅನುಮತಿಗಳ (permissions) ವಿಷಯ ಬಂದಾಗ Form Requests ಬಳಸಿ.

ಅಲ್ಲದೆ, Form Request ನಲ್ಲಿ ಬಿಸಿನೆಸ್ ಲಾಜಿಕ್ ಅನ್ನು ಹಾಕಬೇಡಿ. ಕ್ಯಾಲ್ಕುಲೇಶನ್‌ಗಳು ಮತ್ತು ಡೇಟಾಬೇಸ್ ಅಪ್‌ಡೇಟ್‌ಗಳು Service layer ನಲ್ಲಿ ಇರಬೇಕು.

ಇಂದು ನಿಮ್ಮ ಅತ್ಯಂತ ಗೊಂದಲಮಯವಾದ ಕಂಟ್ರೋಲರ್ ಅನ್ನು ಹುಡುಕಿ. ವ್ಯಾಲಿಡೇಶನ್ ಅನ್ನು Form Request ಗೆ ವರ್ಗಾಯಿಸಿ. ಅದು ಹೇಗೆ ಚಿಕ್ಕದಾಗುತ್ತದೆ ಎಂದು ನೋಡಿ.

ನೀವು ನೋಡಿದ ಅತಿದೊಡ್ಡ store ಮೆಥಡ್ ಯಾವುದು? ಕಾಮೆಂಟ್‌ನಲ್ಲಿ ತಿಳಿಸಿ.

Source: https://dev.to/denisgusto1/seu-controller-ta-fazendo-o-trabalho-do-form-request-e-ele-nao-devia-512o