হ্যালো! আমি তোমার Simple Coding Tutor। এই লেকচারটি তোমার কোর্সের একটি অত্যন্ত গুরুত্বপূর্ণ টার্নিং পয়েন্ট, কারণ এখান থেকে তোমরা একটি পূর্ণাঙ্গ প্রজেক্ট তৈরি করতে যাচ্ছো।
চলো, লেকচারটির সম্পূর্ণ বিষয়বস্তু ধাপে ধাপে এবং সহজভাবে বুঝে নিই।
📝 লেকচার সামারি (Summary for Quick Revision)
ভবিষ্যতে দ্রুত রিভিশন দেওয়ার জন্য পুরো লেকচারের মূল বিষয়গুলো নিচে তালিকাভুক্ত করা হলো:
- Project Overview: আগামী ৪টি সেকশনে একটি Contacts Manager (বা Persons) অ্যাপ্লিকেশন তৈরি করা হবে, যেখানে সম্পূর্ণ CRUD operations (Create, Retrieve, Update, Delete) থাকবে।
- Concept Integration: আগের সেকশনগুলোতে শেখা Razor Views, Layout Views, Dependency Injection, Partial Views এবং Entity Framework-এর প্র্যাকটিক্যাল ব্যবহার হবে।
- UI Features: প্রজেক্টে Data Sorting (Ascending/Descending) এবং Searching ফাংশনালিটি থাকবে।
- Test-Driven Development (TDD): মূল কোড লেখার আগে xUnit ব্যবহার করে Unit Tests লেখা হবে।
- Project Setup: একটি নতুন ASP.NET Core Empty প্রজেক্ট তৈরি করে
Program.cs-এ বেসিক কনফিগারেশন এবংwwwrootফোল্ডার সেটআপ করা হয়েছে।
🧠 Comprehensive Breakdown (বিস্তারিত আলোচনা)
১. Project Overview & CRUD Operations [Priority: 9/10]
এই লেকচারে ইন্সট্রাক্টর জানিয়েছেন যে, আগামী ৪টি সেকশন অত্যন্ত “hands-on” হতে যাচ্ছে। তোমরা একটি Web Application তৈরি করবে যা মূলত CRUD operations এর উপর ভিত্তি করে কাজ করবে।
- কেন এটি গুরুত্বপূর্ণ? বাস্তব জীবনের প্রায় সব সফটওয়্যারই কোনো না কোনোভাবে CRUD-এর উপর নির্ভরশীল। ইউজারের ডেটা তৈরি করা (Create), দেখা (Retrieve), পরিবর্তন করা (Update) এবং মুছে ফেলা (Delete) হলো যেকোনো অ্যাপ্লিকেশনের মূল ভিত্তি।
২. Application UI এবং Features Walkthrough [Priority: 7/10]
ইন্সট্রাক্টর প্রজেক্টের বিভিন্ন পেজ (Views) এর সাথে পরিচয় করিয়েছেন:
-
Index View (
/persons/index): এটি মূল পেজ যেখানে সব Persons-এর লিস্ট একটি Table ফরমেটে দেখাবে। এখানে দুটি বিশেষ ফিচার থাকবে: -
Sorting: কলামের হেডারে ক্লিক করলে ডেটা Ascending অর্ডারে সাজানো হবে, আবার ক্লিক করলে Descending অর্ডারে সাজানো হবে।
-
Searching: একটি ড্রপডাউন এবং সার্চ বক্স থাকবে, যা দিয়ে নির্দিষ্ট ফিল্ডের উপর ভিত্তি করে ডেটা ফিল্টার করা যাবে।
-
Create View: নতুন কোনো Person-এর ডেটা ডেটাবেসে Insert করার জন্য এই ফর্মটি ব্যবহৃত হবে।
-
Edit View: Index পেজ থেকে কোনো Person-এর “Edit” বাটনে ক্লিক করলে এই পেজটি ওপেন হবে। এখানে আগে থেকেই ডেটাগুলো পপুলেট (populate) করা থাকবে, যা ইউজার মডিফাই করে Update করতে পারবে।
-
Delete View: Delete বাটনে ক্লিক করলে একটি কনফার্মেশন পেজ আসবে। কনফার্ম করার পর ডেটাবেস থেকে সেই রেকর্ডটি মুছে যাবে।
৩. Test-Driven Development (TDD) এবং xUnit [Priority: 10/10]
এই প্রজেক্টটি TDD বা Test-Driven Development অ্যাপ্রোচ ফলো করে তৈরি করা হবে।
- কেন এটি ব্যবহার করা হচ্ছে? TDD এর মূল নিয়ম হলো— অ্যাপ্লিকেশন এর মেইন ফাংশনালিটি (Controller/Service logic) ইমপ্লিমেন্ট করার আগে, সেই লজিকগুলো টেস্ট করার জন্য Unit Tests লিখতে হবে। এতে কোডে বাগ (bug) কমার সম্ভাবনা থাকে এবং কোডের কোয়ালিটি ভালো হয়।
- এই কোর্সে Unit Testing এর জন্য xUnit প্যাকেজ ব্যবহার করা হবে।
৪. Initial Project Setup [Priority: 10/10]
лекচпরে একটি নতুন ASP.NET Core Empty প্রজেক্ট তৈরি করে তার প্রাথমিক সেটআপ দেখানো হয়েছে।
- প্রজেক্টের নাম দেওয়া হয়েছে
CRUD Exampleএবং সলিউশনের নামCRUD Solution। - ডেভেলপমেন্টের সুবিধার্থে “Configure for HTTPS” আনচেক করা হয়েছে।
- স্ট্যাটিক ফাইল (যেমন- CSS, JS) রাখার জন্য প্রজেক্টের রুটে
wwwrootনামে একটি ফোল্ডার তৈরি করে সেখানে পূর্বনির্ধারিত একটি CSS ফাইল রাখা হয়েছে।
Program.cs Configuration (আধুনিক পদ্ধতিতে):
লেকচারে দেখানো সেটআপটি আধুনিক .NET (Minimal Hosting Model) ব্যবহার করে করা হয়েছে। নিচে এর কোড ইমপ্লিমেন্টেশন এবং প্রতিটি লাইনের কারণ ব্যাখ্যা করা হলো:
var builder = WebApplication.CreateBuilder(args);
// Controllers এবং Views কে Service হিসেবে DI কন্টেইনারে অ্যাড করা হচ্ছে
builder.Services.AddControllersWithViews();
var app = builder.Build();
// ডেভেলপমেন্ট এনভায়রনমেন্টে থাকলে Developer Exception Page এনাবল করা
if (app.Environment.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
// wwwroot ফোল্ডার থেকে স্ট্যাটিক ফাইল (CSS, JS, Images) সার্ভ করার জন্য
app.UseStaticFiles();
// Routing মেকানিজম এনাবল করার জন্য
app.UseRouting();
// Attribute Routing ব্যবহার করে Controller এর রুটগুলো ম্যাপ করার জন্য
app.MapControllers();
app.Run();
💡 Best Practices (সর্বোত্তম অনুশীলন)
- TDD Best Practice: যখন xUnit দিয়ে Unit Tests লিখবে, তখন টেস্ট মেথডগুলোর নামকরণের ক্ষেত্রে একটি নির্দিষ্ট কনভেনশন ফলো করবে (যেমন:
MethodName_StateUnderTest_ExpectedBehavior)। এতে টেস্ট ফেইল করলে খুব সহজেই বোঝা যায় কোথায় সমস্যা হয়েছে। - Routing Order:
Program.csফাইলে Middleware-এর ক্রম (Order) অত্যন্ত গুরুত্বপূর্ণ। সব সময়app.UseStaticFiles()এবংapp.UseRouting()কেapp.MapControllers()বাapp.UseEndpoints()এর আগে কল করবে। - Environment Check:
app.UseDeveloperExceptionPage()শুধুমাত্র Development এনভায়রনমেন্টেই ব্যবহার করা উচিত। প্রোডাকশনে এটি থাকলে হ্যাকাররা অ্যাপ্লিকেশনের ইন্টার্নাল স্ট্রাকচার এবং সেনসিটিভ এরর মেসেজ দেখে ফেলতে পারে। - .NET 10 Context: .NET 6 থেকে শুরু করে .NET 10 পর্যন্ত
Startup.csফাইলের আর প্রয়োজন হয় না। উপরের কোড ব্লকে দেখানোWebApplicationBuilderপদ্ধতিটিই বর্তমানে স্ট্যান্ডার্ড। .NET 10-এও এই একই Minimal Hosting আর্কিটেকচার ব্যবহৃত হয়, তবে পারফরম্যান্স এবং বিল্ড টাইম আরও অপ্টিমাইজড।