হাসিব, চলো আজকের টপিকটা নিয়ে আলোচনা করি। আউটলাইন অনুযায়ী এটি তোমার কোর্সের ৮৮ নম্বর লেকচার (Section 8: Views - MVC Architecture Pattern)। এই লেকচারে Razor View-তে switch স্টেটমেন্ট কীভাবে কাজ করে, তা নিয়ে আলোচনা করা হয়েছে।
নিচে পুরো লেকচারটির বিস্তারিত ব্রেকডাউন দেওয়া হলো:
📝 Summary (সারসংক্ষেপ)
- Topic: Razor Views-এ switch স্টেটমেন্টের ব্যবহার।
- Purpose: একটি ভ্যালুর ওপর ভিত্তি করে বিভিন্ন কন্ডিশনে ভিন্ন ভিন্ন HTML আউটপুট Render করা।
- Key Concept: C#-এর সাধারণ switch স্টেটমেন্টের মতোই কাজ করে, তবে case-এর ভেতরে সরাসরি HTML কোড লেখা যায়।
- Best Use Case: যখন কোনো Model-এ Enum বা একাধিক নির্দিষ্ট ভ্যালু থাকে এবং প্রতিটি ভ্যালুর জন্য আলাদা UI/HTML দেখাতে হয়।
📌 Razor Views - Switch Statement [Priority: 7/10]
MVC (Model-View-Controller) প্যাটার্নে View-এর কাজ হলো ইউজারকে ডেটা দেখানো। অনেক সময় আমাদের লজিকের ওপর ভিত্তি করে ভিউ পরিবর্তন করতে হয়। সাধারণ C# কোডের মতোই Razor View (.cshtml)-এ আমরা @switch ব্যবহার করে এই কাজটি খুব সহজেই করতে পারি।
💡 Why? (কেন ব্যবহার করবো?)
ধরে নাও, তোমার অ্যাপ্লিকেশনে ইউজারের Gender (লিঙ্গ) অনুযায়ী আলাদা আলাদা মেসেজ বা ডিজাইন দেখাতে হবে। এখন তুমি চাইলে অনেকগুলো if-else ব্লক লিখতে পারো, কিন্তু ভ্যালু যখন আগে থেকেই নির্দিষ্ট (যেমন- Enum), তখন switch ব্যবহার করা অনেক বেশি ক্লিন এবং রিডেবল (Readable)।
🛠️ Step-by-Step Breakdown ও Code Implementation
লেকচারে দেখানো উদাহরণটি আমরা একটু গুছিয়ে কোডসহ নিচে দেখছি:
ধাপ ১: Enum এবং Model তৈরি করা প্রথমে আমাদের একটি Enum এবং একটি Model ক্লাস লাগবে।
// Models/Person.cs
public enum Gender
{
Male,
Female,
Other
}
public class Person
{
public string Name { get; set; }
public Gender PersonGender { get; set; }
}
ধাপ ২: Razor View-তে Switch এর ব্যবহার এবার .cshtml ফাইলে আমরা একটি Person অবজেক্ট তৈরি করবো এবং তার PersonGender প্রোপার্টির ওপর ভিত্তি করে HTML রেন্ডার করবো। Razor-এ switch লেখার নিয়ম হলো শুরুতে একটি @ (At symbol) দেওয়া।
<!-- Views/Home/Index.cshtml -->
@{
// লেকচারের সুবিধার্থে এখানে ম্যানুয়ালি ডেটা ইনিশিয়ালাইজ করা হলো
// (সাধারণত এই ডেটা Controller থেকে আসে)
var person = new Person
{
Name = "Hasib",
PersonGender = Gender.Male
};
}
<h3>User Welcome Area</h3>
@switch (person.PersonGender)
{
case Gender.Male:
<div class="alert alert-primary">
<p>Welcome, Mr. @person.Name! Here are some men's clothing offers.</p>
</div>
break;
case Gender.Female:
<div class="alert alert-danger">
<p>Welcome, Ms. @person.Name! Check out our new cosmetics collection.</p>
</div>
break;
case Gender.Other:
<div class="alert alert-info">
<p>Welcome, @person.Name! Explore our latest products.</p>
</div>
break;
default:
<div class="alert alert-secondary">
<p>Welcome, @person.Name!</p>
</div>
break;
}
কীভাবে কাজ করছে?
- এখানে person.PersonGender-এর ভ্যালু Gender.Male।
- switch ব্লকটি চেক করবে কোন case-এর সাথে ভ্যালুটি মিলে যায়।
- যেহেতু প্রথম কন্ডিশনটি মিলে গেছে, তাই এটি “Welcome, Mr. Hasib…” সম্বলিত HTML টুকু রেন্ডার করবে এবং break পেয়ে বেরিয়ে আসবে। অন্য কোনো কন্ডিশন চেক করবে না।
- যদি কোনো case ম্যাচ না করে, তখন default ব্লকটি এক্সিকিউট হবে (যদিও লেকচারে বলা হয়েছে default ঐচ্ছিক, তবে এটি ব্যবহার করা ভালো প্র্যাকটিস)।
⌨️ Editor Shortcuts
লেকচারের শেষে ইন্সট্রাক্টর জুম আউট (Decrease zoom) করার একটি শর্টকাট ব্যবহার করেছেন।
- Visual Studio / Visual Studio Code শর্টকাট: কোড এডিটরে জুম আউট করতে Ctrl + - (Control এবং মাইনাস কি) চাপতে হয়।
- বিকল্প পদ্ধতি: Ctrl চেপে ধরে মাউসের স্ক্রল হুইল নিচের দিকে (Scroll Down) ঘোরালেও জুম আউট হয়। জুম ইন করতে Ctrl + = অথবা Scroll Up করতে হয়।
⭐ Best Practices & Modern Updates (.NET MVC Context)
- Keep Views Clean (Fat Controller/Thin View): Razor View-তে খুব বড় switch লজিক লেখা বা অনেক বেশি C# কোড রাখা ভালো প্র্যাকটিস নয়। যদি তোমার switch লজিক অনেক বড় হয়ে যায় (ধরো ২০ লাইনের HTML প্রতিটি case-এ), তবে এই লজিকটি View-তে না রেখে ViewComponent অথবা Partial View-তে নিয়ে যাওয়া উচিত।
- Always use Default Case: সবসময় একটি default কেস রাখা উচিত, যাতে ডাটাবেজ থেকে কোনো অপ্রত্যাশিত ভ্যালু আসলে অ্যাপ্লিকেশন ক্র্যাশ না করে বা ব্ল্যাংক (Blank) স্ক্রিন না দেখায়।
- Modern C# Update (Switch Expressions): .NET 10 বা আধুনিক C# ভার্সনগুলোতে (C# 8.0 এর পর থেকে) Switch Expressions অনেক জনপ্রিয়। তবে Razor View-তে সরাসরি বড় HTML ব্লক রেন্ডার করার ক্ষেত্রে পুরোনো স্টাইলের switch ই বেশি মানানসই। কিন্তু তুমি যদি Controller থেকে কোনো নির্দিষ্ট স্ট্রিং সেট করে View-তে পাঠাতে চাও, তবে Controller-এ আধুনিক Switch Expression ব্যবহার করতে পারো। যেমন:
// Controller এর ভেতরে Switch Expression এর আধুনিক ব্যবহার
string greetingMessage = person.PersonGender switch
{
Gender.Male => $"Welcome, Mr. {person.Name}!",
Gender.Female => $"Welcome, Ms. {person.Name}!",
_ => $"Welcome, {person.Name}!" // '_' হলো default case
};
ViewBag.Message = greetingMessage;
এরপর View-তে শুধু @ViewBag.Message লিখে দিলেই হবে। এতে View আরও ক্লিন থাকে।