زمان:
حجم:
16M
معماری کلین در ASP.Net Core MVC
ساخته شده از هوش مصنوعی
پروژه ASP.Net Core MVC (وب و سی شارپ)
معماری کلین در ASP.Net Core MVC ساخته شده از هوش مصنوعی
انواع معماری و لایهها در ASP.Net Core MVC
---
🎙️ توضیح تکمیلی: انواع معماری و لایهها در طراحی نرمافزار
در طراحی نرمافزار، معماری یعنی نحوهی سازماندهی کدها و مسئولیتها. چند مدل رایج وجود داره:
- معماری سهلایه (Three-Tier): شامل لایه نمایش (UI)، لایه منطق (Business Logic)، و لایه داده (Data Access). ساده و مناسب پروژههای کوچک تا متوسط.
- معماری MVC (Model-View-Controller): دادهها در Model، رابط کاربری در View، و کنترل جریان در Controller. پایهی ASP.NET Core MVC.
- معماری کلین (Clean Architecture): شامل پنج لایه مستقل:
- Domain: موجودیتها و منطق اصلی
- Application: سرویسها و Use Caseها
- Infrastructure: ارتباط با سرویسهای خارجی
- Persistence: دیتابیس و Repositoryها
- Presentation: رابط کاربری و APIها
مزیت معماری کلین اینه که وابستگیها از بیرون به درون هستن، نه برعکس—یعنی منطق اصلی پروژه همیشه مستقل باقی میمونه.
---
🎙️ بخش اول: چرا معماری کلین؟
معماری کلین یه سبک طراحی نرمافزار مدرن و قابل توسعهست که هدفش جداسازی مسئولیتها، کاهش وابستگیها و افزایش تستپذیریه.
در این معماری، منطق کسبوکار در مرکز قرار میگیره و لایههای دیگر به اون وابسته هستن—not the other way around.
---
🎙️ بخش دوم: معرفی پنج لایه اصلی
1️⃣ Domain Layer (لایه دامنه)
هستهی اصلی سیستم.
شامل موجودیتها (Entities)، قوانین کسبوکار، و مدلهای اصلی.
کاملاً مستقل از سایر لایههاست و هیچ وابستگی به دیتابیس یا UI نداره.
> مثال: کلاس User با ویژگیهایی مثل Name, Email, IsActive
---
2️⃣ Application Layer (لایه کاربردی)
منطق اجرایی و سرویسهای اپلیکیشن اینجا قرار میگیرن.
شامل Use Caseها، اینترفیسها، و سرویسهایی که با Domain تعامل دارن.
> مثال: IUserService برای مدیریت کاربران، یا RegisterUserCommand
---
3️⃣ Infrastructure Layer (زیرساخت)
پیادهسازیهای واقعی برای اینترفیسهای لایه Application.
شامل سرویسهای ارسال ایمیل، پیامک، فایل، و ارتباط با APIهای خارجی.
> مثال: کلاس SmsSender که از ISmsService پیروی میکنه و به پنل پیامکی متصل میشه
---
4️⃣ Persistence Layer (لایه ذخیرهسازی)
مسئول ارتباط با دیتابیس.
شامل Repositoryها، DbContext، و Migrationها.
از Entity Framework Core یا Dapper استفاده میشه.
> مثال: UserRepository که عملیات CRUD روی جدول کاربران انجام میده
---
5️⃣ Presentation Layer (لایه نمایش)
رابط کاربری پروژه.
در ASP.NET Core MVC شامل Controllerها، Viewها، Razor Pages و API Endpointهاست.
> مثال: UserController که اطلاعات کاربر رو از سرویس میگیره و به View ارسال میکنه
---
🎙️ بخش سوم: مزایای معماری کلین
- تستپذیری بالا
- توسعهپذیری و نگهداری آسان
- جداسازی کامل منطق کسبوکار از UI و دیتابیس
- پیادهسازی اصول SOLID و Dependency Inversion
فهرست پروژه
۱- اولین پروژه
۲- مدیریت کار
۳- مدیریت فروشگاه
4- تکمیل مدیریت فروشگاه
۵- مدیریت نقش
۶- فروشگاه کوچک
۷- پروژه وبلاگ دارای سه نقش
۸- پروژه وبلاگ دارای Area
۹- راهنمای ایجاد Individual Accounts
۱۰- پروژه Individual Accounts بدونه نقش
۱۱- پروژه mvc خالی و کدهای Individual Accounts
۱۲- یک فروشگاه شخصی کوچک دارای سبد خرید
۱۳- پروژه قالب تک صفحه ای
۱۴- تکمیل پروژه قالب تک صفحه ای
۱۵- سامانه مدیریت جلسات
۱۶- گالری فروشگاه
۱۷- پروژه دوزبان فارسی و انگلیسی
۱۸- آموزش پیاده سازی پنل پیامک کاوه نگار
۱۹- پروژه ادامه درس باگتو
۲۰- مدیریت تایمر تخفیف محصولات
۲۱- تغییر در پروژه مدیریت تایمر تخفیف محصولات
۲۲- اضافه شدن علامت سوال در مدل پروژه فروشگاه
۲۳- ایجاد ریپوزیتوری و سرویس در مدیریت دانش آموزان
۲۴- پروژه کوچک دارای سبد خرید
۲۵- پروژه ساده برای تازهکار
۲۶- مقایسه دو پروژه منطق برنامه در کنترلر در مقابل ریپوزیتوری و سرویس
فهرست پادکست
۱-ASP .NET Core MVC: معماری و عملکرد
۲- ساخت وبلاگ با Asp .net Core MVC
۳- Asp .Net Core MVC و جاوااسکریپت
۴- مقایسه Asp .net MVC و Core MVC
۵- امنیت و احراز هویت ساده در ASP .Net Core MVC
۶- عملیات CRUD در ASP .NET Core MVC
۷- Razor و Layout در ASP .Net Core MVC
۸- ارتباط بین جدولها در ASP .NET Core MVC با Entity Framework Core
۹- متدهای Get و Post در فرم
۱۰- جستجو با متد گت در ASP .Net Core MVC
۱۱- معماری سرویس و ریپوزیتوری در ASP .Net Core MVC
۱۲- کوکی در ASP .Net Core MVC
۱۳- Middleware در ASP_NET Core_ کنترل جریان درخواست_ها
۱۴- مدیریت خطا و گزارش گیری در ASP .Net Core
۱۵- ساخت اتصال به SQL Server در ASP .Net Core MVC
۱۶- تحول وب دات نت از Web Forms تا دات نت ۸
۱۷- مدیریت تصاویر در Asp .Net Core MVC
۱۸- ساخت سبد امن و کار آمد در ASP .Net Core MVC
۱۹- مدیریت پیچیدگی صفحات وب ویومدل و ویو کامپوننت در ASP .Net Core MVC
۲۰- صفر تا صد اتصال به زرین پال در ASP .Net Core MVC
۲۱- احراز هویت پیامکی در ASP .Net Core
۲۲- معماری کلین در ASP .Net Core MVC
هنوز ادامه دارد و همه جوره پروژه ساخته میشه حتی برای مبتدیان
زمان:
حجم:
14.8M
کدهای تصادفی در #C و ASP.Net Core
ساخته شده از هوش مصنوعی
پروژه ASP.Net Core MVC (وب و سی شارپ)
کدهای تصادفی در #C و ASP.Net Core ساخته شده از هوش مصنوعی
دربارهی انواع روشهای تولید اعداد تصادفی در C# و ASP.NET Core صحبت کنیم. این موضوع هم برای امنیت مهمه، هم برای کاربردهایی مثل OTP، بازیها، یا انتخابهای تصادفی.
---
🎙️ بخش اول: کلاس Random — ساده و سریع
کلاس Random رایجترین روش تولید عدد تصادفی در C# هست.
برای تولید عدد بین ۰ تا ۹۹۹۹:
csharp
var rand = new Random();
int code = rand.Next(0, 10000);
🔸 مزایا: ساده، سریع، مناسب برای کاربردهای عمومی
🔸 معایب: قابل پیشبینی در شرایط خاص، بهویژه در امنیت
---
🎙️ بخش دوم: RandomNumberGenerator — امن و رمزنگاریشده
برای تولید عدد تصادفی امن، مخصوصاً در احراز هویت یا رمز عبور، از RandomNumberGenerator استفاده میکنیم:
csharp
using System.Security.Cryptography;
byte[] bytes = new byte[4];
RandomNumberGenerator.Fill(bytes);
int secureCode = BitConverter.ToInt32(bytes, 0) % 900000 + 100000;
🔐 این روش برای تولید OTP یا کدهای تأیید بسیار مناسبتره چون از الگوریتمهای رمزنگاری استفاده میکنه.
---
🎙️ بخش سوم: Guid — شناسه یکتا با ساختار تصادفی
برای تولید شناسههای یکتا، از Guid.NewGuid() استفاده میشه:
csharp
var id = Guid.NewGuid().ToString();
🔸 کاربرد: شناسه سفارش، توکنهای تأیید، لینکهای بازگشتی
🔸 مزیت: یکتا بودن در سطح جهانی
---
🎙️ بخش چهارم: استفاده در ASP.NET Core
در پروژههای ASP.NET Core، این روشها معمولاً در سناریوهای زیر استفاده میشن:
- تولید کد تأیید برای پیامک یا ایمیل
- ساخت لینکهای بازگشتی برای پرداخت یا ثبتنام
- تولید رمزهای موقت یا توکنهای امنیتی
- انتخاب تصادفی از لیستها یا دادهها
برای ذخیرهسازی این کدها، میتونیم از Session، Redis، یا دیتابیس استفاده کنیم. همچنین میتونیم زمان انقضا یا محدودیت دفعات استفاده براشون تعریف کنیم.
---
🎙️ بخش پنجم: نکتههای تکمیلی برای توسعهدهندهها
- همیشه برای امنیت از RandomNumberGenerator استفاده کن
- برای تستپذیری، میتونی از مقدار ثابت در Random(seed) استفاده کنی
- برای تولید رشته تصادفی، میتونی از ترکیب کاراکترها و حلقه استفاده کنی
- برای جلوگیری از تکرار، از تاریخ و زمان در ترکیب با عدد تصادفی استفاده کن
زمان:
حجم:
18.3M
پازل Claim در ASP.Net Core
ساخته شده از هوش مصنوعی
پروژه ASP.Net Core MVC (وب و سی شارپ)
پازل Claim در ASP.Net Core ساخته شده از هوش مصنوعی
مفهوم Claim در ASP.NET Core MVC صحبت کنیم—یکی از پایههای مهم در احراز هویت و کنترل دسترسی که خیلیها ازش غافل میشن.
---
🎙️ بخش اول: Claim یعنی چی؟
در دنیای برنامهنویسی، Claim یعنی «ادعا» یا «اطلاعاتی دربارهی هویت کاربر» که توسط سیستم احراز هویت ثبت میشه.
مثلاً وقتی کاربر وارد سایت میشه، سیستم میتونه ادعا کنه که:
- این کاربر ایمیلش فلان است
- نقشش "مدیر" است
- کشورش "ایران" است
این اطلاعات به شکل Claim ذخیره میشن و میتونن در طول جلسه کاربر برای تصمیمگیری استفاده بشن.
---
🎙️ بخش دوم: Claim در ASP.NET Core MVC چطور استفاده میشه؟
در ASP.NET Core، Claimها معمولاً در کنار Identity و Authentication استفاده میشن.
وقتی کاربر لاگین میکنه، میتونیم Claimها رو بهش اضافه کنیم:
csharp
var claims = new List<Claim>
{
new Claim(ClaimTypes.Name, user.UserName),
new Claim(ClaimTypes.Role, "Admin"),
new Claim("Country", "Iran")
};
var identity = new ClaimsIdentity(claims, "Login");
var principal = new ClaimsPrincipal(identity);
await HttpContext.SignInAsync(principal);
🔐 حالا در هر جای پروژه، میتونی این اطلاعات رو بخونی:
csharp
var userName = User.FindFirst(ClaimTypes.Name)?.Value;
var role = User.FindFirst(ClaimTypes.Role)?.Value;
var country = User.FindFirst("Country")?.Value;
---
🎙️ بخش سوم: کاربردهای Claim در پروژه واقعی
Claimها برای کنترل دسترسی خیلی مفیدن. مثلاً:
- فقط کاربرانی که نقش "مدیر" دارن بتونن وارد پنل مدیریت بشن
- فقط کسانی که کشورشون "ایران" هست بتونن ثبتنام کنن
- نمایش محتوای خاص بر اساس سن یا جنسیت کاربر
> این یعنی امنیت و شخصیسازی، بدون نیاز به کوئریهای سنگین در هر درخواست.
---
🎯 نکتههای تکمیلی برای توسعهدهندهها
- Claimها در کنار JWT هم استفاده میشن برای APIهای امن
- میتونی Claim دلخواه بسازی، مثل "IsSubscriber" یا "PreferredLanguage"
- برای تست، از ابزارهایی مثل JWT.io استفاده کن تا Claimها رو ببینی
پروژه ASP.Net Core MVC (وب و سی شارپ)
پازل Claim در ASP.Net Core ساخته شده از هوش مصنوعی
کنترلر AccountController.cs
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using ProductShopC.Models;
using System.Security.Claims;
namespace ProductShopC.Controllers
{
public class AccountController : Controller
{
private readonly AppDbContext _context;
public AccountController(AppDbContext context)
{
_context = context;
}
// ثبتنام
[HttpGet]
public IActionResult Register() => View();
[HttpPost]
public async Task<IActionResult> Register(string username, string password)
{
if (await _context.Users.AnyAsync(u => u.Username == username))
{
ModelState.AddModelError("", "نام کاربری قبلاً ثبت شده");
return View();
}
var user = new User
{
Username = username,
PasswordHash = BCrypt.Net.BCrypt.HashPassword(password)
};
_context.Users.Add(user);
await _context.SaveChangesAsync();
return RedirectToAction("Login");
}
// ورود
[HttpGet]
public IActionResult Login() => View();
[HttpPost]
public async Task<IActionResult> Login(string username, string password)
{
var user = await _context.Users.FirstOrDefaultAsync(u => u.Username == username);
if (user == null || !BCrypt.Net.BCrypt.Verify(password, user.PasswordHash))
{
ModelState.AddModelError("", "نام کاربری یا رمز اشتباه است");
return View();
}
var claims = new List<Claim> { new Claim(ClaimTypes.Name, user.Username) };
var identity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
var principal = new ClaimsPrincipal(identity);
await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, principal,
new AuthenticationProperties { IsPersistent = true, ExpiresUtc = DateTime.UtcNow.AddDays(3) });
return RedirectToAction("Index", "Home");
}
// خروج
public async Task<IActionResult> Logout()
{
await HttpContext.SignOutAsync();
return RedirectToAction("Index", "Home");
}
}
}
زمان:
حجم:
17M
CQRSدر ASP.Net Core
ساخته شده از هوش مصنوعی
پروژه ASP.Net Core MVC (وب و سی شارپ)
CQRSدر ASP.Net Core ساخته شده از هوش مصنوعی
الگوی CQRS در برنامهنویسی با ASP.NET Core—الگویی که وقتی درکش کنی، ساختار پروژههات حرفهایتر، قابل تستتر و قابل توسعهتر میشن.
---
🎯 CQRS یعنی چی؟
CQRS مخفف Command Query Responsibility Segregation هست، یعنی «تفکیک مسئولیتهای خواندن و نوشتن».
در این الگو، عملیات خواندن (Query) و نوشتن (Command) از هم جدا میشن تا هر کدوم بهینه و مستقل عمل کنن.
---
🧩 چرا از CQRS استفاده میکنیم؟
- سادهسازی منطق برنامه
- افزایش تستپذیری
- بهبود عملکرد در سیستمهای بزرگ
- جداسازی مسئولیتها برای توسعهدهندهها
مثلاً در پروژه فروشگاه، عملیات «نمایش لیست محصولات» (Query) با عملیات «افزودن محصول جدید» (Command) کاملاً جدا پیادهسازی میشن.
---
🛠️ ساختار CQRS در ASP.NET Core
در معماری CQRS معمولاً از کتابخانههایی مثل MediatR استفاده میشه تا Command و Queryها رو مدیریت کنیم.
🔹 Command: عملیات تغییر دادهها
مثلاً ثبت سفارش، حذف کاربر، ویرایش محصول
csharp
public class CreateOrderCommand : IRequest<bool>
{
public int ProductId { get; set; }
public int Quantity { get; set; }
}
🔹 Query: عملیات خواندن دادهها
مثلاً گرفتن لیست سفارشها، جزئیات محصول
csharp
public class GetOrdersQuery : IRequest<List<OrderDto>> { }
و بعد با IRequestHandler هر کدوم رو جداگانه هندل میکنیم.
---
📦 ابزارهای رایج برای پیادهسازی CQRS
- MediatR برای مدیریت Command و Queryها
- AutoMapper برای تبدیل مدلها
- FluentValidation برای اعتبارسنجی Commandها
- Entity Framework Core برای ذخیرهسازی دادهها
---
🎯 نتیجهگیری
الگوی CQRS بهت کمک میکنه پروژههات رو تمیزتر، قابل تستتر و قابل توسعهتر بسازی.
اگه تازه وارد دنیای معماریهای نرمافزاری شدی، CQRS یه نقطهی عالی برای شروعه—مخصوصاً وقتی با MediatR ترکیب بشه.