MyShopApp.zip
حجم:
16M
توضیح Soft Delete یعنی حذف نرم یا حذف منطقی.
به زبان ساده:
وقتی کاربر رکوردی رو حذف میکنه، واقعاً از دیتابیس پاک نمیشه، فقط علامتگذاری میشه که "حذف شده".
🎯 چرا Soft Delete؟
مشکل Delete عادی (Hard Delete):
داده برای همیشه از بین میره
قابل بازیابی نیست
گزارشگیری قدیمی مشکل داره
وابستگیهای جدول به هم میریزه
مزایای Soft Delete:
بازیابی اطلاعات (در صورت اشتباه کاربر)
حفظ تاریخچه (مثلاً سفارشهای قدیمی)
گزارشگیری دقیق (میتونیم هم حذف شدهها رو ببینیم، هم موجودها)
امنیت بیشتر (کاربر عادی فکر میکنه حذف کرده، ولی داده هست)
📋 پروژه مثال: فروشگاه (MyShop)
بیا با یه پروژه ساده ببینیم چطور کار میکنه.
MyAdvancedShop.zip
حجم:
16.2M
فیلتر پیشرفته
نکته: فکر نکن تکراریه این هم با روش جدید با جدا سازی منطقی که با سرویس آشنا بشی
تقویم شمسی.zip
حجم:
6.9K
تقویم شمسی ساخته شده از هوش مصنوعی
لاغر_کردن_کنترلرهای_ASP.Net Core.mp3
زمان:
حجم:
4.7M
لاغر کردن کنترلر در ASP.Net Core MVC
ساخته شده از هوش مصنوعی
این متن در قالب یک پادکست آموزشی، به بررسی چالش شلوغی بیش از حد کنترلرها در برنامهنویسی ASP.NET Core و راهکارهای رفع آن میپردازد. محتوا با استفاده از شباهتسازیهای ملموس مانند مدیریت رستوران و هتل، شش روش کلیدی شامل لایه سرویس، الگوی مدیاتور، ارکستریتور، معماری تمیز، CQRS و فیلترها را برای جداسازی منطق برنامهنویسی توضیح میدهد. هر یک از این رویکردها با هدف افزایش نظم، تستپذیری و نگهداری آسانتر کد معرفی شدهاند تا از تبدیل شدن کنترلرها به واحدهای پیچیده و غیرقابل کنترل جلوگیری شود. در نهایت، منبع تأکید میکند که انتخاب هر روش باید بر اساس مقیاس و نیاز اختصاصی پروژه صورت گیرد. این راهنما به توسعهدهندگان کمک میکند تا با توزیع درست مسئولیتها، ساختار نرمافزار خود را بهینهسازی کنند.
MyChartShop.zip
حجم:
16.2M
پروژه نمودار حرفه ای ترکیب سی شارپ و جاوااسکریپت
// ۲. دادههای نمودار قیمت (گرید ۵ تایی)
var priceChartData = products
.Where(p => p.IsActive) // فقط محصولات فعال
.OrderByDescending(p => p.Price)
.Take(10) // ۱۰ محصول گرانقیمت
.Select(p => new ChartData
{
Label = p.Name.Length > 15 ? p.Name.Substring(0, 15) + "..." : p.Name,
Value = p.Price,
Color = GetRandomColor()
})
.ToList();
## ✅ توضیح کد نمودار قیمت
این کد برای نمودار قیمت محصولات در داشبورد استفاده میشه. بیایم خط به خط بررسی کنیم:
---
## 📊 هدف کد:
نمایش ۱۰ محصول گرانقیمت (فقط محصولات فعال) در نمودار
---
## 🔍 توضیح خط به خط:
### ۱. فیلتر محصولات فعال
.Where(p => p.IsActive)- فقط محصولاتی که فعال هستند (IsActive = true) انتخاب میشن - محصولات غیرفعال تو نمودار نمیان ### ۲. مرتبسازی نزولی بر اساس قیمت
.OrderByDescending(p => p.Price)- محصولات از گرانترین به ارزانترین مرتب میشن ### ۳. گرفتن ۱۰ محصول اول
.Take(10)- فقط ۱۰ محصول اول (گرانترینها) انتخاب میشن ### ۴. تبدیل به دادههای نمودار
.Select(p => new ChartData
{
Label = p.Name.Length > 15 ? p.Name.Substring(0, 15) + "..." : p.Name,
Value = p.Price,
Color = GetRandomColor()
})
- Label: نام محصول (اگه بیش از ۱۵ کاراکتر باشه، برش میخوره و ... اضافه میشه)
- Value: قیمت محصول
- Color: یه رنگ تصادفی برای نمایش در نمودار
### ۵. تبدیل به لیست
.ToList()- نهایتاً به لیست تبدیل میشه --- ## 📋 خروجی نمونه: فرض کنیم این محصولات رو داریم: | نام محصول | قیمت | فعال | |-----------|------|------| | لپتاپ ایسوس با مشخصات ویژه | ۱۵,۰۰۰,۰۰۰ | ✅ | | گوشی سامسونگ اس۲۳ اولترا | ۱۲,۰۰۰,۰۰۰ | ✅ | | تبلت اپل آیپد پرو | ۱۰,۰۰۰,۰۰۰ | ❌ | | مانیتور گیمینگ ۲۴ اینچ | ۸,۰۰۰,۰۰۰ | ✅ | خروجی کد:
[
{
"Label": "لپتاپ ایسوس با...", // برش خورده
"Value": 15000000,
"Color": "#4361ee"
},
{
"Label": "گوشی سامسونگ اس...",
"Value": 12000000,
"Color": "#f72585"
},
{
"Label": "مانیتور گیمینگ...",
"Value": 8000000,
"Color": "#4cc9f0"
}
]
---
## 🎯 دلیل این طراحی:
1. فقط محصولات فعال: محصولات غیرفعال نباید تو آمار بیان
2. ۱۰ محصول گرانقیمت: مهمترین محصولات از نظر ارزش
3. برش نامهای طولانی: برای نمایش بهتر در نمودار
4. رنگ تصادفی: برای تفکیک visually در نمودار
---
## 📊 نمودار نهایی:
این دادهها به Chart.js داده میشه و یه نمودار میلهای (Bar Chart) با این مشخصات میسازه:
- محور افقی: نام محصولات
- محور عمودی: قیمت (تومان)
- هر محصول: یک ستون با رنگ متفاوت
---
حالا فهمیدی چرا اینجوری نوشته شده؟ 🚀## ✅ آموزش جامع Select در LINQ
Selectیکی از مهمترین و پرکاربردترین متدهای LINQ هست. بیا کامل یادش بگیریم: --- ## 📚 فهرست مطالب: 1. Select چیست؟ 2. تفاوت Select و Where 3. انواع Select 4. Select با اشیاء ناشناس (Anonymous) 5. Select با ایندکس 6. SelectMany (تودرتو) 7. مثالهای واقعی از پروژههای MVC --- ## ۱. 🔍 Select چیست؟
Selectمثل دستگاه تبدیل میمونه. ورودی میگیره، تبدیل میکنه، خروجی میده.
// فرض کن این لیست رو داری
List<string> names = new List<string> { "علی", "رضا", "سارا" };
// میخوای همه رو به حروف بزرگ تبدیل کنی
var upperNames = names.Select(n => n.ToUpper()).ToList();
// خروجی: ["علی", "رضا", "سارا"] -> ["علی", "رضا", "سارا"]
---
## ۲. 🔍 تفاوت Select و Where
| متد | کاربرد | مثال |
|-----|--------|------|
| Where | فیلتر کردن (تعداد کم یا زیاد میشه) | products.Where(p => p.Price > 1000) |
| Select | تبدیل کردن (تعداد ثابت میمونه) | products.Select(p => p.Name) |
var products = GetProducts(); // Where: تعداد کم میشه (فقط گرونها) var expensiveProducts = products.Where(p => p.Price > 1000000); // Select: تعداد ثابت، فرم تغییر میکنه var productNames = products.Select(p => p.Name); var productPrices = products.Select(p => p.Price);--- ## ۳. 🎯 انواع Select ### نوع ۱: انتخاب یک Property
// فقط نام محصولات var names = products.Select(p => p.Name).ToList(); // فقط قیمتها var prices = products.Select(p => p.Price).ToList();### نوع ۲: تبدیل به نوع دیگر
// تبدیل Product به string var productInfo = products.Select(p => $"{p.Name} - {p.Price} تومان").ToList(); // تبدیل Product به یک کلاس دیگر var productViewModels = products.Select(p => new ProductViewModel { ProductName = p.Name, DisplayPrice = p.Price.ToString("N0") + " تومان" }).ToList();### نوع ۳: محاسبات روی داده
// قیمت با تخفیف var discountedPrices = products.Select(p => new { p.Name, OriginalPrice = p.Price, DiscountedPrice = p.Price * 0.9m, // ۱۰٪ تخفیف Tax = p.Price * 0.09m }).ToList();--- ## ۴. 📦 Select با اشیاء ناشناس (Anonymous) اینجا بود که کد قبلی رو نوشتیم:
var priceChartData = products
.Where(p => p.IsActive)
.OrderByDescending(p => p.Price)
.Take(10)
.Select(p => new // اینجا شیء ناشناس میسازیم
{
Label = p.Name.Length > 15 ? p.Name.Substring(0, 15) + "..." : p.Name,
Value = p.Price,
Color = GetRandomColor()
})
.ToList();
چرا شیء ناشناس؟ چون برای نمودار فقط به این ۳ تا فیلد نیاز داریم، نه کل Product.
---
## ۵. 🔢 Select با ایندکس
میتونیم به شماره آیتم هم دسترسی داشته باشیم:
var productsWithIndex = products.Select((p, index) => new { RowNumber = index + 1, // شماره ردیف p.Name, p.Price }).ToList(); // خروجی: // { RowNumber = 1, Name = "لپتاپ", Price = 15000000 } // { RowNumber = 2, Name = "موبایل", Price = 8000000 }--- ## ۶. 🔗 SelectMany (تودرتو) برای لیستهای تو در تو:
// فرض کن هر Category چندتا Product داره
public class Category
{
public string Name { get; set; }
public List<Product> Products { get; set; }
}
var categories = GetCategories();
// با Select معمولی: میشه لیست لیستها
var allProductsList = categories.Select(c => c.Products).ToList();
// خروجی: List<List<Product>>
// با SelectMany: همه محصولات رو یه دونه میکنه
var allProducts = categories.SelectMany(c => c.Products).ToList();
// خروجی: List<Product>
---
## ۷. 💡 مثالهای واقعی از پروژه MVC
### مثال ۱: برای Dropdown
// تبدیل محصولات به آیتمهای dropdown ViewBag.Products = products.Select(p => new SelectListItem { Value = p.Id.ToString(), Text = p.Name }).ToList();### مثال ۲: برای جدول با فرمت خاص
var tableData = products.Select(p => new { p.Id, PersianDate = p.CreatedAt.ToPersianDate(), PriceWithCurrency = p.Price.ToString("N0") + " تومان", StatusText = p.IsActive ? "فعال" : "غیرفعال", StatusClass = p.IsActive ? "success" : "secondary" }).ToList();