আপনার কন্ট্রোলার ভুল কাজ করছে

আপনার কন্ট্রোলারটি খুলুন। একটি store মেথড খুঁজুন।

এতে কি ৪০ লাইনের কোড আছে? আপনি কি একটি বিশাল ভ্যালিডেশন ব্লক, বেশ কিছু if স্টেটমেন্ট, বিজনেস লজিক এবং শেষে একটি return স্টেটমেন্ট দেখতে পাচ্ছেন?

আপনার কন্ট্রোলার এমন কাজ করছে যা তার করা উচিত নয়।

একটি কন্ট্রোলারের একটিই কাজ। এটি একটি রিকোয়েস্ট গ্রহণ করে, সমস্যা সমাধানের জন্য একটি সার্ভিস কল করে এবং একটি রেসপন্স রিটার্ন করে। এটি একজন ওয়েটার, শেফ নয়।

যখন আপনি একটি কন্ট্রোলারের ভেতরে ভ্যালিডেশন এবং অথরাইজেশন রাখেন, তখন এটি একটি বিশৃঙ্খলায় পরিণত হয়। আপনি শেষে ৮০ লাইনের কোড নিয়ে দাঁড়াবেন যা কেউ স্পর্শ করতে চাইবে না।

Laravel-এ একটি বিল্ট-ইন সমাধান রয়েছে: Form Requests।

একটি সাধারণ খারাপ প্যাটার্ন দেখতে এরকম:

  • ইনপুট ডেটা ভ্যালিডেট করা
  • ইউজারের পারমিশন চেক করা
  • ডেটা ট্রান্সফর্ম করা
  • বিজনেস লজিক চালানো

এটি Single Responsibility Principle লঙ্ঘন করে। একটি ক্লাসের পরিবর্তনের জন্য কেবল একটি কারণ থাকা উচিত। রিকোয়েস্ট ফ্লো পরিবর্তন হলে একটি কন্ট্রোলার পরিবর্তিত হয়। শুধুমাত্র একটি ভ্যালিডেশন রুল পরিবর্তনের কারণে এটি পরিবর্তিত হওয়া উচিত নয়।

এটি ঠিক করতে এই কমান্ডটি ব্যবহার করুন: php artisan make:request StorePostRequest

এটি আপনার রিকোয়েস্ট লজিকের জন্য একটি ডেডিকেটেড ফাইল তৈরি করে। এই তিনটি জিনিস Form Request-এ নিয়ে যান:

  • Authorization: পারমিশন চেক করতে authorize() মেথড ব্যবহার করুন।
  • Validation: আপনার ডেটার প্রয়োজনীয়তা সংজ্ঞায়িত করতে rules() মেথড ব্যবহার করুন।
  • Data Preparation: ভ্যালিডেশনের আগে ডেটা ক্লিন বা ফরম্যাট করতে prepareForValidation() ব্যবহার করুন।

এখন আপনার কন্ট্রোলারটি আবার দেখুন:

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

কন্ট্রোলারটি এখন মাত্র দুই লাইনের। এটি আবারও একজন ওয়েটারের মতো কাজ করছে।

কন্ট্রোলার মেথড শুরু হওয়ার আগেই Laravel স্বয়ংক্রিয়ভাবে অথরাইজেশন এবং ভ্যালিডেশন সম্পন্ন করে। যদি ভ্যালিডেশন ব্যর্থ হয়, তবে ইউজার তাৎক্ষণিকভাবে একটি এরর পাবে।

এই নির্দেশিকাগুলো অনুসরণ করুন:

  • ভ্যালিডেশন যদি ছোট হয় এবং কেবল একটি জায়গায় ব্যবহৃত হয়, তবে তা ইনলাইন রাখুন।
  • যদি ভ্যালিডেশন বড় হয়, বারবার ব্যবহৃত হয় বা অথরাইজেশন অন্তর্ভুক্ত থাকে, তবে Form Request ব্যবহার করুন।
  • 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