স্বাগতম! আমরা এখন আপনার কোর্সের Section 20 (Filters)-এর “Impact of Short Circuiting” (লেকচার ২৯৮) টপিকে আছি।
এই লেকচারটি ইন্টারভিউ এবং রিয়েল-লাইফ প্রোজেক্টের আর্কিটেকচার বোঝার জন্য অত্যন্ত গুরুত্বপূর্ণ! আমরা আগেই দেখেছি যে, ফিল্টার থেকে রেজাল্ট রিটার্ন করে রিকোয়েস্ট শর্ট-সার্কিট (Short-circuit) করা যায়। কিন্তু প্রশ্ন হলো, যখন আমরা কোনো একটি ফিল্টারে শর্ট-সার্কিট করি, তখন তার পেছনের বা সামনের অন্যান্য ফিল্টারগুলোর ভাগ্যে কী ঘটে? আজ আমরা সেই ইমপ্যাক্ট বা প্রভাব নিয়েই আলোচনা করব। চলুন শুরু করি!
📝 Quick Revision Summary
ভবিষ্যতে দ্রুত রিভিশন দেওয়ার জন্য শর্ট-সার্কিটিংয়ের ইমপ্যাক্টগুলো নিচে দেওয়া হলো:
- Short-circuiting in Authorization Filter: সব কিছু বাইপাস হয়ে যায়! Model Binding, Action Method, অন্যান্য সমস্ত ফিল্টার—সবকিছু স্কিপ হয়ে সরাসরি রেসপন্স চলে যায়।
- Short-circuiting in Resource Filter (
OnResourceExecuting): Model Binding, Action Filter, Action Method এবং Result Filter স্কিপ হয়। কিন্তু Resource Filter-এরOnResourceExecuted(After Logic) ঠিকই রান করে। - Short-circuiting in Action Filter (
OnActionExecuting): শুধুমাত্র Action Method স্কিপ হয়। এর মানে হলো Action Filter-এরOnActionExecuted(After Logic), Result Filter এবং Resource Filter-এর After Logic স্বাভাবিকভাবেই রান করে। - Short-circuiting in Exception Filter: Result Filter স্কিপ হয়ে যায়। Exception Filter থেকে যে রেজাল্ট দেওয়া হয়, সেটিই এক্সিকিউট হয় এবং এরপর Resource Filter-এর After Logic রান করে।
- Short-circuiting in Result Filter (
OnResultExecuting): শুধুমাত্র Result Execution (যেমন: HTML তৈরি করা) স্কিপ হয়। কিন্তুOnResultExecutedএবংOnResourceExecutedস্বাভাবিকভাবেই রান করে।
🔍 Comprehensive Breakdown
১. The Golden Rule of Short-circuiting [Priority: 10/10]
শর্ট-সার্কিটিংয়ের মূল নিয়ম হলো: আপনি যেখানে শর্ট-সার্কিট করবেন, তার সামনের (ভেতরের) সবকিছু স্কিপ হয়ে যাবে, কিন্তু তার পেছনের (বাইরের) “After Logic” বা Executed মেথডগুলো ঠিকই রান করবে।
Pipeline-এর স্ট্রাকচারটা মনে করুন (বাইরে থেকে ভেতরে):
Authorization -> Resource -> Model Binding -> Action Filter -> Action Method -> Result Filter
২. Impact on Authorization Filter [Priority: 9/10]
- কী হয়: যেহেতু Authorization Filter একদম শুরুতে থাকে, তাই এখানে শর্ট-সার্কিট (যেমন: ইউজার লগইন না থাকলে 401 Unauthorized দেওয়া) করলে পুরো পাইপলাইনটাই স্কিপ হয়ে যায়।
- কেন: ইউজার আনঅথরাইজড হলে ভেতরের আর কোনো কাজই (এমনকি Model Binding বা Resource Filter-এর After Logic-ও) হওয়ার দরকার নেই।
৩. Impact on Resource Filter [Priority: 9/10]
- কী হয়: Resource Filter-এর Before Logic-এ (
OnResourceExecuting) শর্ট-সার্কিট করলে Model Binding, Action Filter, Action Method এবং Result Filter কিছুই রান করে না। - ব্যতিক্রম: কিন্তু যেহেতু Resource Filter নিজেই রিকোয়েস্টটিকে শর্ট-সার্কিট করেছে, তাই তার নিজের After Logic (
OnResourceExecuted) ঠিকই রান করবে। - কেন: এটি সাধারণত Caching বা Unsupported Content-Type ব্লক করার জন্য ব্যবহৃত হয়।
৪. Impact on Action Filter [Priority: 10/10]
এটি সবচেয়ে বেশি ব্যবহৃত হয় এবং লেকচারার এটি প্র্যাকটিক্যালি ডিবাগ করে দেখিয়েছেন।
- কী হয়: Action Filter-এ শর্ট-সার্কিট (যেমন:
ModelState.IsValid == falseহলে) করলে শুধুমাত্র Action Method-টি স্কিপ হয়। - কী কী রান করে: 1. Action Filter-এর After Logic (অর্থাৎ
await next()-এর নিচের অংশ)।
- Result Filter (Before & After)।
- Resource Filter-এর After Logic।
- কেন: কারণ Action Filter-এর দায়িত্ব শুধু Action Method-কে ঘিরে রাখা। সে যখন Action Method-কে স্কিপ করে নিজে রেজাল্ট রিটার্ন করে দেয়, তখন বাইরের ফিল্টারগুলো (যেমন Result বা Resource) ভাবে যে, রেজাল্ট তো এসেছে, তাই তারা তাদের স্বাভাবিক কাজ (After Logic) চালিয়ে যায়।
৫. Impact on Exception Filter [Priority: 8/10]
- কী হয়: Exception Filter-এ যখন আমরা কাস্টম রেজাল্ট (যেমন
ContentResult) সেট করি, তখন Action Method থেকে আসা আসল রেজাল্টটি ওভাররাইট (Overwrite) হয়ে যায়। - কী কী রান করে: যেহেতু নতুন রেজাল্ট তৈরি হয়ে গেছে, তাই Result Filter-টি আর রান করে না। কিন্তু Exception Filter-এর পর সরাসরি Resource Filter-এর After Logic রান করে।
৬. Practical Debugging [Priority: 10/10]
লেকচারার Action Filter-এর শর্ট-সার্কিট প্র্যাকটিক্যালি দেখিয়েছেন:
- ইউজার ইনভ্যালিড ডেটা নিয়ে
Createবাটনে ক্লিক করে। - রিকোয়েস্ট
Action Filter-এর Before Logic-এ আসে। ModelState.IsValid == falseহওয়ায়context.Result = View(...)সেট করে শর্ট-সার্কিট করা হয়।- ম্যাজিক: এরপর ব্রেকপয়েন্ট Action Method-এ যায় না! বরং এটি Action Filter-এর After Logic-এ যায়, এরপর Resource Filter-এর After Logic-এ গিয়ে শেষ হয়।
🚀 Best Practices
Interview Note: লেকচারার খুব সুন্দর একটি কথা বলেছেন—এই টপিকটি ইন্টারভিউয়ের জন্য খুবই গুরুত্বপূর্ণ। ইন্টারভিউয়াররা প্রায়ই জানতে চান:
- “If I short-circuit in an Action Filter, will the Result Filter execute?” -> উত্তর: হ্যাঁ, করবে।
- “If I short-circuit in an Authorization Filter, will the Resource Filter’s OnResourceExecuted run?” -> উত্তর: না, করবে না।
.NET 10 Minimal APIs Context:
Minimal API-তে এই জটিলতাগুলো অনেকটাই কম, কারণ সেখানে EndpointFilter-ই সব কাজ করে। সেখানে আপনি যদি শর্ট-সার্কিট করেন (return Results.BadRequest()), তবে এর ভেতরের লজিক আর রান করে না, তবে আপনি যদি একাধিক Endpoint Filter চেইন করেন, তবে বাইরের ফিল্টারগুলোর After Logic ঠিকই রান করবে (ঠিক Action Filter-এর মতোই)।
আশা করি শর্ট-সার্কিটিংয়ের ইমপ্যাক্ট বা প্রভাবটি আপনার কাছে পানির মতো পরিষ্কার হয়ে গেছে। পরবর্তী লেকচারে আমরা Always Run Result Filters নিয়ে আলোচনা করব।