CookieApp.zip
حجم:
2.6M
این کد یک کنترلر (Controller) در فریمورک ASP.NET Core است که برای مدیریت کوکیها (Cookies) استفاده میشود. این پروژه عملیات اصلی ایجاد (CRUD) روی کوکیها را انجام میدهد. در ادامه جزئیات بخشهای مختلف کد را توضیح میدهم:
### ۱. ساختار کلی و دادهها
* فضای نام (Namespace): CookieApp.Controllers نشان میدهد که این کد مربوط به لایه کنترلر برنامه است.
* **لیست موقت (
_cookies):** از آنجا که کوکیها در مرورگر کاربر ذخیره میشوند و سرور دسترسی مستقیم به لیست تمام کوکیهای ذخیره شده ندارد (مگر آنهایی که با هر درخواست ارسال میشوند)، یک لیست استاتیک
_cookiesایجاد شده تا وضعیت کوکیها را در حافظه سرور نگه دارد و بتوانیم آنها را در View نمایش دهیم. (در برنامههای واقعی به جای لیست استاتیک باید از دیتابیس استفاده کرد). ### ۲. اکشن متدها (Action Methods) #### متد
Index(نمایش لیست) * این متد با متد
GetAllCookies()فراخوانی میشود. *
GetAllCookiesدو کار انجام میدهد: ۱. کوکیهای موجود در لیست حافظه (
_cookies) را بررسی میکند و مقدار واقعی آنها را از Request.Cookies میخواند. ۲. تمام کوکیهای ارسال شده توسط مرورگر را میخواند و اگر در لیست نباشند، به آنها اضافه میکند. * در نهایت لیست به View بازگردانده میشود. #### متدهای
Create(ایجاد کوکی) * نسخه GET: فقط یک View خالی برای فرم ایجاد برمیگرداند. * نسخه POST: اطلاعات فرم را دریافت میکند. * اعتبارسنجی: با استفاده از
IsValidNameو
IsValidValueچک میکند که نام و مقدار کوکی فقط شامل حروف انگلیسی و اعداد باشد. * تنظیمات: یک شیء
CookieOptionsساخته میشود که تاریخ انقضا، امنیت (Https) و سایر تنظیمات را مشخص میکند. * ذخیره: با استفاده از Response.Cookies.Append کوکی در مرورگر کاربر ایجاد میشود و همزمان در لیست
_cookiesثبت میشود. #### متدهای
Edit(ویرایش کوکی) * کوکیها به صورت مستقیم قابل ویرایش نیستند. بنابراین این متد ابتدا کوکی قدیمی را با Response.Cookies.Delete حذف میکند. * سپس یک کوکی جدید با همان نام اما مقادیر و تاریخ انقضای جدید ایجاد میکند. * اطلاعات در لیست
_cookiesنیز بهروزرسانی میشوند. #### متدهای
Delete(حذف کوکی) * کوکی مورد نظر را از لیست پیدا میکند. * با استفاده از Response.Cookies.Delete آن را از مرورگر حذف میکند. * همچنین از لیست حافظه سرور (
_cookies) نیز پاک میکند. #### متد
Details(مشاهده جزئیات) * اطلاعات یک کوکی خاص را نمایش میدهد. * علاوه بر اطلاعات ذخیره شده در لیست، مقدار واقعی فعلی کوکی را از Request.Cookies میخواند و در
ViewBagقرار میدهد تا کاربر ببیند آیا کوکی منقضی شده است یا خیر. ### ۳. نکات فنی و امنیتی * **
HttpOnly = true:** این تنظیم باعث میشود اسکریپتهای سمت کلاینت (JavaScript) نتوانند به محتوای کوکی دسترسی داشته باشند، که امنیت را در برابر حملات XSS افزایش میدهد. * **
Secure = Request.IsHttps:** اگر درخواست HTTPS باشد، کوکی فقط از طریق کانال امن منتقل میشود. * **
ValidateAntiForgeryToken:** از حملات CSRF (جعل درخواست بین سایتی) جلوگیری میکند. ### ۴. جمعبندی این کد یک رابط کاربری مدیریتی ساده برای کار با کوکیها فراهم میکند. اگرچه از لیست استاتیک استفاده شده که برای محیطهای Production (تولید) مناسب نیست (چون با ریستارت سرور پاک میشود و در سرورهای چند هستهای مشکلساز میشود)، اما برای یادگیری و تست نحوه کار با Response.Cookies و Request.Cookies بسیار مناسب است.
🚀 نقشه راه جامع و صددرصدی فولاستک ASP.NET Core 🚀
📊 سطح ۱: مقدماتی - بنا نهادن ستونهای استوار
💻 سیشارپ (C# Basics)
• 🏗️ ساختار برنامه، متغیرها و انواع داده
• ➕ عملگرها، شرطها و حلقهها
• 📚 آرایهها و کالکشنها (Lists, Dictionaries)
• 🧱 شیگرایی (OOP): کلاس، شی، وراثت، پلیمورفیسم
🌐 وب (HTML & CSS Basics)
• 📄 ساختار سند HTML5 (تگهای معنایی)
• 🎨 مقدمات CSS3: انتخابگرها، رنگها، فونتها
• 📦 مدل باکس (Box Model) و نمایش (Display)
• 📱 فلسفه طراحی واکنشگرا (Responsive Design) و مدیا کوئریها
⚡ جاوااسکریپت (JavaScript Fundamentals)
• 🔤 متغیرها (var, let, const) و انواع داده
• ⚙️ توابع و Arrow Functions
• 🖱️ کار با DOM (انتخاب عناصر، تغییر محتوا و استایل)
• 🔘 رویدادها (Events) مثل click و submit
🌍 مبانی وب و پروتکل HTTP (Web Fundamentals)
• 🔄 درک معماری کلاینت-سرور
• 📨 مفاهیم کلیدی HTTP: Methodها، Status Codeها
• 📡 ساختار درخواست و پاسخ (Request/Response)
• 🍪 آشنایی با Session و Cookie
📌 کنترل نسخه (Version Control)
• 📂 مفاهیم پایه Git: مخزن، کامیت، شاخه
• ⌨️ کار با دستورات ضروری: clone, add, commit, push, pull
• 🐙 ایجاد حساب در GitHub/GitLab
🎯 ASP.NET Core MVC (شروع)
• 🛠️ نصب محیط (Visual Studio / VS Code)
• 📁 ساختار پروژه و پوشهها
• 👨💻 ایجاد اولین Controller و View
• 📤 ارسال داده از Controller به View
------------------------------------------------------------------
📈 سطح ۲: متوسط - پویایی و زیبایی
💻 سیشارپ (Intermediate C#)
• 🔍 کار با LINQ برای پردازش دادهها
• 🧰 Generic Collections و Interfaces
• ⚠️ مدیریت خطاها (Exception Handling)
• ⏳ برنامهنویسی Asynchronous (async/await)
🎨 وب (Bootstrap Framework)
• 📦 نصب و پیکربندی Bootstrap
• 📐 سیستم Grid برای چیدمان
• 🧩 کامپوننتها: Navbar, Cards, Modals, Alerts
• 📝 فرمها و اعتبارسنجی ظاهری
⚡ جاوااسکریپت (Intermediate JS)
• 🔄 Callbacks, Promises و Async/Await
• 📊 کار با JSON و Fetch API
• 🌳 مدیریت DOM پیشرفته و Event Bubbling
• ✨ ES6+ Features
🗄️ پایگاه داده (Database Foundations)
• 📐 اصول طراحی: نرمالسازی و روابط
• 🎛️ آشنایی با SQL Server و SSMS
• ✍️ کوئریهای SQL: SELECT, INSERT, UPDATE, DELETE
• ⚡ آشنایی با ایندکس (Index)
🎯 ASP.NET Core MVC (Core Development)
• 📋 مدلها و Data Annotations
• 🔗 Entity Framework Core: Code-First، Migration
• 🏷️ تگهای کمکی (Tag Helpers)
• 📝 ایجاد فرمها و پردازش (GET & POST)
• ✅ اعتبارسنجی سمت سرور و کلاینت
-------------------------------------------------------------------
🔥 سطح ۳: پیشرفته - حرفهای شدن
💻 سیشارپ (Advanced C#)
• 🧬 برنامهنویسی جنریک پیشرفته
• 📢 Delegates, Events و Lambda Expressions
• ⚡ LINQ to Entities و بهینهسازی کوئریها
• 🏗️ الگوهای طراحی (Repository, Singleton)
🗄️ پایگاه داده (Advanced Database)
• 🔧 بهینهسازی کوئریهای LINQ
• 📦 آشنایی با Stored Procedure و View
• 🔄 مدیریت تراکنشها (Transactions)
🛠️ ابزارهای توسعه (Developer Tools)
• 🔍 ابزار توسعهدهندگان مرورگر (F12)
• 📬 کار با Postman برای تست API
🔒 امنیت (Security Deep Dive)
• 🔐 احراز هویت دو مرحلهای (2FA)
• 🔑 JWT در مقابل Cookie-based
• 🚦 Rate Limiting
⚡ جاوااسکریپت (Modern JS & Libraries)
• ⚛️ آشنایی با React/Vue.js
• 📦 مدیریت پکیجها با npm/yarn
• 🛠️ کتابخانههای کاربردی (SweetAlert2, DataTables)
🎯 ASP.NET Core MVC (Advanced Server-Side)
• 💉 تزریق وابستگی (Dependency Injection)
• 🎛️ فیلترها (Filters) و Middlewareها
• 🛡️ Authentication و Authorization (Identity)
• 🛡️ محافظت در برابر CSRF و XSS
• 🌐 ایجاد Web API های RESTful
🔄 تعامل سرور و کلاینت (AJAX Integration)
• 📡 استفاده از fetch یا jQuery.ajax
• 🔄 بهروزرسانی Partial Views با AJAX
• ⚠️ مدیریت خطاهای سمت کلاینت
-------------------------------------------------------------------
👑 سطح ۴: کارشناسی - معماری و مقیاسپذیری
🏗️ معماری نرمافزار (Architecture)
• ✨ معماری تمیز (Clean Architecture) و DDD
• 📋 الگوی CQRS با MediatR
• 🧩 میکروسرویسها (Microservices)
• 📨 طراحی Event-Driven با RabbitMQ
💻 سیشارپ و بهینهسازی (High Performance C#)
• 🧠 مدیریت حافظه و Garbage Collection
• ⚡ استفاده از Span و Memory
• 🔄 برنامهنویسی موازی (Parallel Programming)
• 🔍 Reflection و Emit
🎨 فرانتاند پیشرفته (Advanced Frontend)
• 🧩 ساخت کامپوننتهای پیشرفته
• 📊 مدیریت State پیچیده
• ⚡ بهینهسازی Core Web Vitals
• 📱 Progressive Web Apps (PWA)
🎯 ASP.NET Core MVC (Expert Server-Side)
• 💬 SignalR برای ارتباط بلادرنگ
• 🚀 کشینگ پیشرفته با Redis
• 💓 Health Checks و مانیتورینگ
• ✍️ Middleware سفارشی
🧪 تست نرمافزار (Testing & QA)
• 🧪 تست واحد (Unit Testing) با xUnit
• 🔗 تست یکپارچگی (Integration Testing)
• 🌐 تست فرانتاند با Jest/Selenium
🚀 DevOps و استقرار (DevOps & Deployment)
• 🐳 کانتینریسازی با Docker
• ☸️ اورکستریشن با Kubernetes
• 🔄 CI/CD با GitHub Actions
• 🖥️ استقرار روی Linux (Nginx) و IIS
--------------------------------------------------------------------
💡 پروژههای عملی پیشنهادی
🟢 سطح مقدماتی
📄 صفحه شخصی "درباره من"
HTML + CSS سفارشی + Bootstrap ساده
🟡 سطح متوسط
📝 وبلاگ ساده
EF Core + Layout + اصول SQL
🟠 سطح پیشرفته
🛒 فروشگاه اینترنتی
AJAX + پنل مدیریت + احراز هویت + تست با Postman
🔴 سطح کارشناسی
📊 سیستم مدیریت محتوا (CMS)
معماری تمیز + SignalR + Docker + استقرار ابری
--------------------------------------------------------------------
✨ نکات کلیدی برای موفقیت
• ⏰ روزی ۳-۴ ساعت زمان مفید
• 📝 پروژهمحور یاد بگیرید
• 🤝 در GitHub مشارکت کنید
• 📚 مستندات مایکروسافت را بخوانید
• 🧪 همیشه کدتان را تست کنید
• 🌏 انگلیسی یاد بگیرید
--------------------------------------------------------------------
🎯 جمعبندی
این نقشه راه، یک مسیر ۱۰۰٪ کامل برای تبدیل شدن به یک فولاستک دولوپر حرفهای با ASP.NET Core است. از سطح مقدماتی تا کارشناسی، همه چیز را پوشش داده:
✅ برنامهنویسی C#
✅ طراحی وب (HTML/CSS/JS)
✅ پایگاه داده و SQL
✅ امنیت و ابزارها
✅ معماری و DevOps
✅ پروژههای عملی
--------------------------------------------------------------------
🌟 موفق باشید! راه سختی است، اما شدنی و لذتبخش! 🌟
AjaxCrudProject.zip
حجم:
2.5M
پروژه Ajax کراد بدونه رفرش
این پروژه نمایش 12 خطای پیدا نشد 404 و آیکون را هم به پروژه اضافه کنید
برای پیادهسازی این سناریو در ویوی
Index، ما باید یک حلقه
forایجاد کنیم که ۴۰۵ دکمه تولید کند. هر دکمه باید به اکشن
HandleErrorدر کنترلر
Errorلینک شود و شماره مربوط به خود را ارسال نماید. در ادامه کد کامل ویو (View) و کنترلر (Controller) آورده شده است: ### ۱. کد کنترلر (ErrorController.cs) این کنترلر شامل اکشنی است که شماره را دریافت کرده و نام ویو را به صورت پویا انتخاب میکند. csharp using Microsoft.AspNetCore.Mvc; namespace MyProject.Controllers { public class ErrorController : Controller { // این اکشن نام ویو را بر اساس شماره ورودی برمیگرداند public IActionResult HandleError(int id) { // ساخت نام ویو (مثلاً اگر id=32 باشد، viewName میشود "Action32") string viewName = $"Action{id}"; // بررسی میکنیم که آیا فایل ویو وجود دارد یا خیر تا خطا ندهد var result = ViewEngine.FindView(ControllerContext, viewName, isMainPage: false); if (result.Success) { return View(viewName); } else { // اگر ویو وجود نداشت، به صفحه ۴۰۴ اصلی برگردان return View("Action404"); } } } } ### ۲. کد ویو (Index.cshtml) در این ویو، یک حلقه از ۱ تا ۴۰۵ اجرا میشود و برای هر عدد یک دکمه (Tag Anchor) ساخته میشود که به اکشن بالا لینک دارد. html @{ ViewData["Title"] = "صفحه اصلی"; } <div class="text-center"> <h1 class="display-4">لیست دکمههای اکشن</h1> <p>برای مشاهده هر ویو روی دکمه مربوطه کلیک کنید:</p> <div class="button-container"> @* حلقه برای تولید ۴۰۵ دکمه *@ @for (int i = 1; i <= 405; i++) { // استفاده از Tag Helper برای ساخت لینک به اکشن HandleError در کنترلر Error // مقدار i به عنوان پارامتر id ارسال میشود <a asp-controller="Error" asp-action="HandleError" asp-route-id="@i" class="btn btn-primary m-1"> اکشن @i </a> } </div> </div> ### نکات مهم: ۱. تعداد دکمهها: همانطور که خواستید، حلقه تا ۴۰۵ ادامه دارد. ۲. لینکدهی: از
asp-controller="Error"و
asp-action="HandleError"استفاده شده است تا وقتی روی دکمه ۳۲ کلیک میشود، آدرس
/Error/HandleError?id=32اجرا شود. ۳. نامگذاری ویوها: فرض بر این است که شما در پوشه
Views/Errorفایلهایی با نامهای Action1.cshtml، Action2.cshtml و ... Action404.cshtml و Action405.cshtml را ایجاد کردهاید. اگر فایل Action32.cshtml وجود نداشته باشد، کنترلر به طور خودکار کاربر را به
Action404هدایت میکند.
پروژه ASP.Net Core MVC (وب و سی شارپ)
بسیار عالی. در اینجا بدون نوشتن حتی یک خط کد، معماری و عملکرد پروژه را بررسی میکنیم و به طور مفهومی توضیح میدهم که LINQ دقیقاً در کجای این سیستم و چگونه کار میکند.
### ۱. معماری کلی پروژه (بدون دیتابیس)
این پروژه به جای اینکه اطلاعات را در یک نرمافزار سنگین دیتابیس (مثل SQL Server) ذخیره کند، از حافظه رم کامپیوتر استفاده میکند. تصور کنید که ما یک تخته وایتبرد (Whiteboard) در دفتر کار داریم.
* مدل (Model): این قالبی است که ما برای هر کارت روی تخته تعریف کردهایم (مثلاً: هر کارت باید عنوان، توضیحات و تاریخ داشته باشد).
* ریپازیتوری (Repository): این شخصی است که مسئول مدیریت تخته وایتبرد است. هیچکس جز او حق ندارد روی تخته چیزی بنویسد یا پاک کند. کنترلر به او میگوید «لیست کارهای انجام شده را بده» و او با نگاه کردن به تخته، جواب را برمیگرداند.
* کنترلر (Controller): این مثل مدیر پروژه است که دستور میدهد. وقتی شما در مرورگر دکمهای را میزنید، کنترلر متوجه میشود و به ریپازیتوری دستور میدهد.
* ویو (View): این فقط نمایشگر است. صفحهای است که شما در مرورگر میبینید و نتایج کار ریپازیتوری روی آن چاپ میشود.
---
### ۲. نقش LINQ در این پروژه (توضیح مفهومی)
در دنیای برنامهنویسی قدیمی، برای پیدا کردن یک اطلاعات خاص در یک لیست، باید یک «حلقه» (Loop) مینوشتیم. مثلاً: «از اولین آیتم شروع کن، یکییکی چک کن تا به آیتم مورد نظر برسی». این کار زمانبر و خستهکننده است.
LINQ (Language Integrated Query) زبانی است که به ما اجازه میدهد با لیستهای داده دقیقاً مثل یک دیتابیس حرفهای صحبت کنیم. ما به زبان فارسی (یا انگلیسی) سوال میپرسیم و جواب را میگیریم، بدون اینکه نگران جزئیات چرخش در بین دادهها باشیم.
در اینجا دقیقاً LINQ در بخشهای مختلف پروژه چه کاری انجام میدهد:
#### الف) فیلتر کردن (Where) - جستجو و فیلتر
وقتی شما در کادر جستجو تایپ میکنید (مثلاً کلمه «پروژه») و دکمه جستجو را میزنید:
* بدون LINQ: برنامه باید تکتک کارتها را برمیداشت و چک میکرد آیا کلمه «پروژه» داخلش هست یا نه.
* با LINQ: ما به لیست میگوییم: «فقط آن کارتهایی را به من بده که در عنوانشان کلمه پروژه وجود دارد.»
* LINQ بلافاصله یک زیرمجموعه جدید از کارتها را جدا کرده و تحویل میدهد. این دقیقاً همان کاری است که در متدهای
Searchو
FilterByStatusانجام شده است. #### ب) مرتبسازی (OrderBy) - اولویتبندی وقتی وارد صفحه اصلی میشوید، میخواهید جدیدترین کارها در بالای لیست باشند. * بدون LINQ: باید الگوریتمهای پیچیده مرتبسازی (مثل حبابی یا سریع) پیادهسازی میشد. * با LINQ: ما به لیست میگوییم: «خودت را بر اساس تاریخ ایجاد، از جدید به قدیم مرتب کن.» * همچنین در بخش فیلتر وضعیت، به لیست گفتیم: «خودت را بر اساس اولویت (عدد کمتر یعنی مهمتر) مرتب کن.» LINQ این کار را در کسری از ثانیه انجام میدهد. #### ج) انتخاب خاص (Select) - نمایش ستونها فرض کنید ما فقط میخواهیم یک لیست کشویی (Dropdown) از نام دانشجویان بسازیم و نیازی به نمره یا کد ملی نداریم. * با LINQ: ما به دیتابیس میگوییم: «از بین تمام این اطلاعات، فقط ستون نام و نام خانوادگی را بردار و بقیه را دور بریز.» این کار باعث سبک شدن برنامه و افزایش سرعت میشود. #### د) پیدا کردن یک مورد خاص (FirstOrDefault) - ویرایش و حذف وقتی روی دکمه «ویرایش» یک کارت خاص کلیک میکنید، سیستم باید فقط همان یک کارت را پیدا کند. * با LINQ: ما میگوییم: «در بین تمام کارتها، دنبال کارتی بگرد که شناسه (ID) آن برابر با ۵ است. اولین موردی که پیدا کردی را به من بده.» * اگر چیزی پیدا نکرد، مقدار «تهی» (Null) برمیگرداند تا برنامه خطا ندهد. #### هـ) تجمیع و محاسبات (Max, Any, Count) - مدیریت هوشمند در بخش ایجاد کارت جدید، ما نمیخواهیم شناسه دو کارت یکسان شود. * با LINQ: ما میپرسیم: «آیا اصلاً کارتی در لیست وجود دارد؟» (
Any). اگر جواب بله بود، میپرسیم: «بزرگترین شناسه (ID) موجود چند است؟» (
Max). سپس یک عدد به آن اضافه میکنیم تا شناسه جدید ساخته شود. ### خلاصه در این پروژه حرفهای، LINQ به عنوان موتور پردازش داده عمل میکند. هر جا که نیاز به تصمیمگیری درباره دادهها بود (چه کاری را نشان دهیم؟، کدام یکی مهمتر است؟، آیا این وجود دارد؟)، LINQ وارد عمل شده و با دستورات بسیار کوتاه و خوانا، کارهای پیچیده برنامهنویسی را انجام میدهد. این کار باعث میشود کد شما تمیز، سریع و قابل نگهداری باشد.
پروژه ASP.Net Core MVC (وب و سی شارپ)
این پروژه یک سیستم مدیریت فروش و مشتریان است که با استفاده از تکنولوژیهای مدرن وب (ASP.NET Core) طراحی شده است. هدف اصلی این پروژه، ثبت اطلاعات مشتریان، مدیریت سفارشات آنها و ارائه گزارشهای تحلیلی از فروش است.
در ادامه، معماری و عملکرد پروژه را بدون کد توضیح میدهم:
### ۱. معماری پروژه (Architecture)
این پروژه از الگوی MVC (Model-View-Controller) پیروی میکند که وظایف را به سه بخش اصلی تقسیم میکند:
* Model (مدل): نمایانگر دادهها هستند. در این پروژه ما دو مدل اصلی داریم: «مشتری» (شامل نام، شهر، ایمیل) و «سفارش» (شامل مبلغ، تاریخ، و شناسه مشتری).
* View (ویو): صفحات وبی هستند که کاربر میبیند (فرمها، جداول، دکمهها). وظیفه ویو نمایش دادهها به کاربر و دریافت ورودیهای اوست.
* Controller (کنترلر): مدیر یا رابط بین کاربر و دادههاست. وقتی کاربر دکمهای را میزند، کنترلر تصمیم میگیرد چه کاری انجام شود (مثلاً اطلاعات را بگیرد، اعتبارسنجی کند و به ریپوزیتوری بسپارد).
### ۲. لایه دسترسی به داده (Repository Pattern)
به جای اینکه کنترلر مستقیماً با دیتابیس یا لیست دادهها کار کند، ما یک لایه میانی به نام Repository داریم.
* وظیفه: این لایه مسئول تمام عملیات ذخیرهسازی، بازیابی، ویرایش و حذف دادههاست.
* مزیت: اگر بخواهید در آینده دیتابیس خود را از "حافظه رم" به "SQL Server" تغییر دهید، فقط کدهای این بخش را تغییر میدهید و نیاز به دست زدن به کنترلرها یا ویوها نیست.
### ۳. مدیریت دادهها (In-Memory Data)
در این پروژه خاص، به جای استفاده از یک دیتابیس سنگین و پیچیده (مثل SQL)، از حافظه موقت (RAM) برای ذخیره دادهها استفاده شده است.
* دادهها در لیستهایی نگهداری میشوند.
* محدودیت: چون دادهها در رم هستند، اگر برنامه را ببندید یا کامپیوتر را ریستارت کنید، دادههای جدید پاک میشوند و به حالت اولیه برمیگردند. این روش برای پروتوتایپها و یادگیری بسیار سریع و مناسب است.
### ۴. قابلیتهای اصلی پروژه (CRUD)
پروژه دارای چهار عملیات اصلی است که روی هر دو موجودیت (مشتری و سفارش) انجام میشود:
1. Create (ایجاد): افزودن مشتری جدید یا ثبت یک سفارش برای مشتری خاص.
2. Read (خواندن): نمایش لیست تمام مشتریان یا لیست تمام سفارشات.
3. Update (بروزرسانی): ویرایش اطلاعات مشتری (مثل تغییر نام یا شهر).
4. Delete (حذف): پاک کردن یک مشتری (که به صورت خودکار سفارشات او را هم پاک میکند تا دادهها خراب نشوند) یا حذف یک سفارش.
### ۵. استفاده از LINQ پیشرفته
یکی از نقاط قوت این پروژه، استفاده از قابلیتهای جستجوی پیشرفته LINQ است. به طور خاص در بخش گزارشگیری:
* Join: ارتباط بین «سفارشات» و «مشتریان» برقرار میشود تا بتوانیم نام مشتری را کنار مبلغ سفارش ببینیم.
* GroupBy: سفارشات بر اساس «شهر» مشتریان دستهبندی میشوند.
* Select: اطلاعات تجمیعی مثل "مجموع فروش"، "تعداد سفارش" و "آخرین تاریخ خرید" برای هر شهر استخراج میشود.
### ۶. جریان کاری (Workflow)
فرض کنید کاربر میخواهد یک سفارش ثبت کند:
1. کاربر از صفحه اصلی وارد بخش مشتریان میشود.
2. لیست مشتریان را میبیند و دکمه «ثبت سفارش» را برای یکی از آنها میزند.
3. یک فرم باز میشود که مبلغ سفارش را میگیرد.
4. اطلاعات به کنترلر ارسال میشود.
5. کنترلر اطلاعات را به ریپوزیتوری میدهد.
6. ریپوزیتوری چک میکند آیا مشتری وجود دارد؟ اگر بله، سفارش را در لیست ذخیره میکند و یک شناسه (ID) جدید به آن اختصاص میدهد.
7. کاربر به صفحه لیست سفارشات هدایت میشود و سفارش جدید را در جدول میبیند.
این پروژه یک نمونه کامل و استاندارد از پیادهسازی عملیات CRUD با استفاده از شیگرایی در سیشارپ است.