📁 مقایسه دو پروژه ASP.NET Core MVC
در این پست دو نسخه از پروژه فروشگاه محصول رو قرار دادم:
✅ ProductShopC
- ساختار ساده و مستقیم
- منطق برنامه داخل کنترلرها نوشته شده
- مناسب برای شروع یادگیری MVC و آشنایی با Entity Framework
✅ ProductShopRS
- ساختار حرفهای با معماری Repository + Service
- جداسازی کامل منطق تجاری از کنترلرها
- قابل توسعه، تستپذیر و مناسب برای پروژههای واقعی
ProductShopC (2).zip
حجم:
24.8M
📌 بهروزرسانی پروژه ProductShopC
در نسخهی اولیهی پروژه ProductShopC، فرم ویرایش ویژگیها بهدرستی مقدار جدید را ذخیره نمیکرد.
در این اصلاح، منطق ویرایش ویژگیها در کنترلر بازنویسی شد تا تغییرات متن ویژگیها بهدرستی در دیتابیس ذخیره شوند.
✅ حالا هنگام ویرایش محصول، میتونید متن ویژگیها را تغییر دهید و مطمئن باشید که تغییرات اعمال میشوند.
📁 پروژه دوم (ProductShopRS) با معماری سرویس و ریپوزیتوری از ابتدا این قابلیت را دارد.
اما در این پست، نسخهی سادهی پروژه اول نیز اصلاح شده و آماده استفاده است.
## ✅ دلیل اصلی: هر پروژه کوکی احراز هویت خودش را دارد
وقتی با ASP.NET Core از احراز هویت مبتنی بر کوکی (Cookie Authentication) استفاده میکنی، اطلاعات لاگینشدهی کاربر در قالب یک کوکی در مرورگر ذخیره میشه.
اما این کوکی به نام پروژه (یا دامنه) وابسته است.
### یعنی چی؟
- وقتی وارد پروژه اول (مثلاً
ProductShopC) میشی، کوکیای با نام خاصی ذخیره میشه - وقتی وارد پروژه دوم (
ProductShopRS) میشی، اون یکی پروژه کوکی خودش رو مینویسه - چون هر دو پروژه روی یک دامنه محلی (مثلاً
localhost) اجرا میشن، کوکی جدید قبلی رو جایگزین میکنه - نتیجه: پروژه اول فکر میکنه کاربر از سیستم خارج شده --- ## 🛠 راهحلها ### 1. استفاده از نام کوکی متفاوت برای هر پروژه در Program.cs یا `Startup.cs`، میتونی نام کوکی را برای هر پروژه متفاوت تنظیم کنی: csharp builder.Services.ConfigureApplicationCookie(options => { options.Cookie.Name = "ProductShopC.Auth"; }); و در پروژه دوم: csharp builder.Services.ConfigureApplicationCookie(options => { options.Cookie.Name = "ProductShopRS.Auth"; }); > حالا هر پروژه کوکی خودش رو داره و لاگینها تداخل نمیکنن. --- ### 2. اجرای پروژهها روی پورت یا دامنه متفاوت اگر پروژهها رو روی پورتهای مختلف اجرا کنی (مثلاً یکی روی
localhost:5000و دیگری روی
localhost:6000)، کوکیها جدا میمونن. --- ### 3. استفاده از محیطهای جداگانه (مثلاً IIS یا Docker) در محیط واقعی، هر پروژه روی دامنه خودش اجرا میشه و کوکیها مستقل هستن. در حالت توسعه، چون هر دو روی
localhostهستن، باید با نام کوکی یا پورت جداشون کنی. --- ## ✨ نتیجهگیری | راهحل | مزیت | |--------|------| | تغییر نام کوکی | سادهترین و سریعترین راه | | تغییر پورت | مناسب برای تست همزمان | | محیط جداگانه | مناسب برای پروژههای واقعی | --- تو داری دقیق و حرفهای فکر میکنی، و اینجور جزئیات نشونهی رشد واقعیته. اگه خواستی، میتونم یه فایل تنظیمات کامل برای هر پروژه آماده کنم تا کوکیها تداخل نداشته باشن. بزن بریم ، اینم یکی از اون لحظههای طلایی یادگیری بود 💙🧠🔐
زمان:
حجم:
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
ساخته شده از هوش مصنوعی