پروژه ASP.Net Core MVC (وب و سی شارپ)
پروژه فروشگاه این قسمت زرین پال با iisExpress بروید و پورت 44350 میباشد تا برگشت به پروژه از بانک تس
این کد در فایل Program مربوط به تنظیمات سرویسها و احراز هویت (Authentication) و مجوزها (Authorization) در یک برنامه ASP.NET Core است. در ادامه بخشهای مختلف این کد توضیح داده شدهاند:
1. تنظیمات Authorization (مجوزها):
csharp
builder.Services.AddAuthorization(options =>
{
options.AddPolicy(UserRoles.Admin, policy => policy.RequireRole(UserRoles.Admin));
options.AddPolicy(UserRoles.Customer, policy => policy.RequireRole(UserRoles.Customer));
options.AddPolicy(UserRoles.Operator, policy => policy.RequireRole(UserRoles.Operator));
});
این بخش تنظیمات مجوزها را تعریف میکند.
AddPolicy:
برای هر نقش (Role)، یک سیاست (Policy) تعریف شده است که مشخص میکند کاربران باید متعلق به نقش مشخصشده باشند تا به منابع مربوطه دسترسی پیدا کنند.
UserRoles.Admin:
سیاستی که فقط کاربران با نقش مدیر (Admin) میتوانند دسترسی داشته باشند.
UserRoles.Customer:
سیاستی که فقط مشتریان (Customer) دسترسی دارند.
UserRoles.Operator:
سیاستی که فقط اپراتورها (Operator) مجوز دارند.
2. تنظیمات Cookie Authentication:
csharp
}).AddCookie(options =>
{
options.LoginPath = new PathString("/Authentication/Signin");
options.ExpireTimeSpan = TimeSpan.FromMinutes(5.0);
});
این تنظیمات مربوط به احراز هویت با استفاده از کوکیها است.
LoginPath:
مشخص میکند که اگر کاربر احراز هویت نشده باشد، به کدام مسیر هدایت شود. در اینجا مسیر /Authentication/Signin برای صفحه ورود کاربر تعریف شده است.
ExpireTimeSpan:
مدت زمان اعتبار کوکیها را تنظیم میکند. در اینجا کوکیها بعد از ۵ دقیقه منقضی میشوند.
3. ثبت سرویسها در Dependency Injection Container:
csharp
builder.Services.AddScoped<ICartService, CartService>();
builder.Services.AddScoped<IAddRequestPayService, AddRequestPayService>();
builder.Services.AddScoped<IGetRequestPayService, GetRequestPayService>();
AddScoped:
مشخص میکند که این سرویسها با اسکوپ (Scope) درخواست HTTP ایجاد شوند، به این معنی که یک نمونه از این سرویس برای هر درخواست HTTP ایجاد میشود.
ICartService, CartService:
سرویس مدیریت سبد خرید.
IAddRequestPayService, AddRequestPayService:
سرویس افزودن درخواست پرداخت.
IGetRequestPayService, GetRequestPayService:
سرویس دریافت اطلاعات پرداخت.
این ثبت سرویسها باعث میشود وابستگیها به صورت خودکار مدیریت شوند.
4. Middlewareهای مربوط به Authentication و Authorization:
csharp
app.UseAuthentication();
app.UseAuthorization();
UseAuthentication: Middleware
برای مدیریت احراز هویت کاربر است. این بخش بررسی میکند که آیا کاربر وارد حساب شده است یا خیر.
UseAuthorization: Middleware
برای مدیریت دسترسیهای کاربر است. این بخش سیاستهای تعریفشده را برای نقشهای کاربر اعمال میکند.
جای Middleware ها عوض شده است
کاربرد کد:
مدیریت نقشها و دسترسیها: با استفاده از سیاستها، دسترسی کاربران به منابع مختلف کنترل میشود.
کنترل اعتبار کوکیها: تنظیمات کوکیها باعث میشود که جلسات احراز هویت به طور خودکار منقضی شوند.
تزریق وابستگیها: ثبت سرویسهای مربوط به سبد خرید و درخواستهای پرداخت به افزایش انعطافپذیری و ماژولار بودن برنامه کمک میکند.
جمعبندی:
این کد به خوبی تنظیمات امنیتی و مدیریتی برنامه را مشخص میکند و همه چیز برای مدیریت نقشها، احراز هویت و تزریق سرویسها طراحی شده است.
پروژه ASP.Net Core MVC (وب و سی شارپ)
پروژه فروشگاه این قسمت زرین پال با iisExpress بروید و پورت 44350 میباشد تا برگشت به پروژه از بانک تس
توضیح کد مدل namespace EndPoint.Site.Models { public class VerifyParameters { public string amount { set; get; } public string merchant_id { set; get; } public string authority { set; get; } } }
این کد یک کلاس مدل به نام VerifyParameters را تعریف میکند که برای ارسال پارامترهای لازم به درگاه پرداخت (مثل زرینپال) طراحی شده است. این کلاس شامل سه ویژگی اصلی است که در فرآیند تأیید پرداخت مورد نیاز هستند:
ویژگیها و توضیحات:
1. amount:
نوع داده: string
وظیفه: مبلغ پرداختی را نشان میدهد. این مقدار معمولاً به صورت عددی ذخیره میشود و نشاندهنده مبلغ تراکنش است.
کاربرد: مشخص کردن مقدار پولی که کاربر باید پرداخت کند.
2. merchant_id:
نوع داده: string
وظیفه: شناسه پذیرنده (Merchant ID) که توسط درگاه پرداخت اختصاص داده میشود.
کاربرد: شناسایی حساب پذیرنده در سیستم درگاه پرداخت.
3. authority:
نوع داده: string
وظیفه: شناسه تراکنش پرداخت. این مقدار توسط درگاه پرداخت (مثل زرینپال) تولید میشود و برای تأیید تراکنش استفاده میگردد.
کاربرد: هنگام تأیید پرداخت، این مقدار باید به درگاه ارسال شود تا تراکنش تأیید شود.
کاربرد کلی کلاس:
این کلاس مدل برای ارسال دادههای مربوط به تأیید پرداخت طراحی شده است و به عنوان یک قالب (template) برای پارامترهای مورد نیاز استفاده میشود.
در سرویسها یا کنترلرها، دادههای مربوط به پرداخت از سمت برنامه جمعآوری شده و در قالب این مدل به درگاه پرداخت ارسال میشوند.
مزایای استفاده از این مدل:
ساختار مشخص: استفاده از مدلهای مشخص مانند VerifyParameters باعث نظم و خوانایی بیشتر کد میشود.
انعطافپذیری بالا: قابلیت گسترش یا تغییر ویژگیهای مدل بدون تأثیر بر سایر بخشهای برنامه.
سازگاری: این مدل برای مطابقت با نیازهای API درگاه پرداخت طراحی شده است.
جمعبندی:
این مدل به خوبی دادههای لازم برای تأیید پرداخت را مدیریت میکند و استفاده از آن باعث کاهش پیچیدگی و افزایش نظم در تعامل با درگاه پرداخت میشود.
پروژه ASP.Net Core MVC (وب و سی شارپ)
پروژه فروشگاه این قسمت زرین پال با iisExpress بروید و پورت 44350 میباشد تا برگشت به پروژه از بانک تس
کلاس RequestParameters برای ارسال پارامترهای ضروری به درگاه پرداخت طراحی شده است. این مدل شامل اطلاعاتی است که برای ایجاد یک درخواست پرداخت لازم هستند. در ادامه، بخشهای مختلف این کلاس توضیح داده میشود:
1. ویژگیها (Properties):
a) merchant_id:
نوع داده: string
وظیفه: شناسه پذیرنده که توسط درگاه پرداخت ارائه میشود.
کاربرد: شناسایی حساب پذیرنده در سیستم درگاه پرداخت.
b) amount:
نوع داده: string
وظیفه: مبلغ تراکنش پرداخت.
کاربرد: نشاندهنده میزان پولی که کاربر باید پرداخت کند.
c) description:
نوع داده: string
وظیفه: توضیحات مرتبط با پرداخت.
کاربرد: مثلاً میتوان توضیحاتی در مورد سفارش یا هدف پرداخت وارد کرد که این اطلاعات به کاربر یا پذیرنده نمایش داده میشود.
d) callback_url:
نوع داده: string
وظیفه: آدرس بازگشتی که پس از تکمیل یا لغو پرداخت توسط درگاه استفاده میشود.
کاربرد: این URL به درگاه پرداخت اعلام میشود تا کاربر پس از انجام پرداخت به آن هدایت شود.
e) metadata:
نوع داده: string[]? (یک آرایه قابل nullable از رشتهها)
وظیفه: شامل اطلاعات اضافی مانند موبایل و ایمیل کاربر.
کاربرد: ارسال اطلاعات جانبی به درگاه پرداخت برای سفارشیسازی تراکنش.
2. سازنده (Constructor):
سازنده این کلاس وظیفه مقداردهی اولیه به ویژگیها را بر عهده دارد. ورودیها:
merchant_id: شناسه پذیرنده.
amount: مبلغ پرداخت.
description: توضیحات تراکنش.
callback_url: آدرس بازگشتی.
mobile: شماره موبایل کاربر (اختیاری).
email: آدرس ایمیل کاربر (اختیاری).
مقداردهی:
متغیرهای ورودی به ویژگیهای کلاس نسبت داده میشوند.
آرایه metadata مقداردهی میشود و در صورت وجود مقادیر mobile و email، مقادیر آنها در آرایه ذخیره میشوند.
3. تبدیل نوع (implicit operator):
متد implicit operator تعریف شده اما هنوز پیادهسازی نشده است. این متد برای تبدیل مستقیم نوع RequestParameters به نوع دیگری (احتمالاً RestSharp.RequestParameters) استفاده میشود.
در حال حاضر، متد یک استثنا (NotImplementedException) را پرتاب میکند.
کاربرد کلاس:
این کلاس به عنوان مدلی برای ارسال پارامترهای مربوط به درخواست پرداخت به درگاه پرداخت استفاده میشود.
ویژگیهایی مانند شناسه پذیرنده، مبلغ پرداخت، توضیحات و آدرس بازگشتی همه در یک ساختار واحد سازماندهی شدهاند.
اطلاعات متادیتا (مانند موبایل و ایمیل) نیز میتوانند به درخواست پرداخت اضافه شوند.
نقاط قوت:
ساختار منظم: ویژگیهای مربوط به درخواست پرداخت به خوبی سازماندهی شدهاند.
انعطافپذیری: از metadata برای افزودن اطلاعات جانبی استفاده میشود.
قابلیت توسعه: سازنده کلاس و متد تبدیل نوع امکان گسترش و استفاده آسان را فراهم میکنند.
پیشنهادات بهبود:
پیادهسازی implicit operator:
پیادهسازی این متد برای تبدیل مستقیم به نوع دیگر (مثلاً RestSharp.RequestParameters) میتواند استفاده از کلاس را سادهتر کند.
بررسی مقادیر ورودی:
میتوان با افزودن اعتبارسنجی (Validation)، از مقداردهی نادرست متغیرها جلوگیری کرد.
جمعبندی:
کلاس RequestParameters مدلی بسیار مفید برای مدیریت پارامترهای پرداخت است و ساختاری انعطافپذیر و کاربرپسند دارد. این کلاس میتواند به راحتی در هر پروژهای که نیاز به تعامل با درگاه پرداخت دارد مورد استفاده قرار گیرد
پروژه ASP.Net Core MVC (وب و سی شارپ)
پروژه فروشگاه این قسمت زرین پال با iisExpress بروید و پورت 44350 میباشد تا برگشت به پروژه از بانک تس
این کد یک کنترلر به نام PayController برای مدیریت فرآیندهای پرداخت در برنامه ASP.NET Core است. در ادامه توضیحات مربوط به بخشهای مختلف آن ارائه شده است:
1. ویژگیها و سازنده (Constructor):
ویژگیها:
IAddRequestPayService
برای ایجاد درخواست پرداخت.
ICartService برای مدیریت سبد خرید.
IGetRequestPayService
برای بازیابی اطلاعات پرداخت.
CookiesManeger
برای مدیریت کوکیهای کاربر.
سازنده:
وابستگیها با استفاده از تزریق وابستگی (Dependency Injection) مقداردهی میشوند.
2. متد Index:
این متد وظیفه ایجاد درخواست پرداخت و هدایت کاربر به درگاه پرداخت را بر عهده دارد.
مراحل:
دریافت شناسه کاربر:
با استفاده از کوکیها یا اطلاعات احراز هویت، شناسه کاربر (UserId) استخراج میشود.
بازیابی سبد خرید:
سبد خرید کاربر با استفاده از ICartService بازگردانده میشود.
بررسی مبلغ سبد خرید:
اگر مبلغ سبد خرید صفر باشد، کاربر به صفحه سبد خرید هدایت میشود.
ایجاد درخواست پرداخت:
با استفاده از IAddRequestPayService درخواست پرداخت در پایگاه داده ذخیره میشود.
ارسال درخواست به درگاه پرداخت:
اطلاعات پرداخت شامل مبلغ، توضیحات، شناسه پذیرنده و لینک بازگشتی به درگاه ارسال میشود.
اگر درگاه پاسخ موفق برگرداند، کاربر به صفحه پرداخت هدایت میشود.
مدیریت خطا:
در صورت قطع اینترنت یا خطا در پاسخ درگاه، پیغام خطا در ویو ErrorView نمایش داده میشود.
3. متد Verify:
این متد وظیفه تأیید پرداخت و مدیریت نتیجه آن را بر عهده دارد.
مراحل:
بررسی وضعیت پرداخت:
وضعیت پرداخت از پارامتر status بررسی میشود. اگر کاربر پرداخت را لغو کرده باشد، پیام خطای "پرداخت توسط کاربر لغو شد" نمایش داده میشود.
بازیابی درخواست پرداخت:
اطلاعات پرداخت مرتبط با GUID از پایگاه داده استخراج میشود.
ارسال درخواست تأیید:
اطلاعات پرداخت شامل مبلغ، شناسه تراکنش (authority) و شناسه پذیرنده (merchant_id) به API تأیید پرداخت ارسال میشود.
بررسی موفقیت پرداخت:
اگر تراکنش موفق باشد، شماره پیگیری پرداخت (ref_id) ذخیره شده و پیام موفقیت نمایش داده میشود.
اگر خطایی وجود داشته باشد، پیام خطای مناسب نمایش داده میشود.
ویژگیهای مهم:
مدیریت سبد خرید:
از ICartService برای بررسی مبلغ و اطلاعات سبد خرید استفاده شده است.
ارتباط با درگاه پرداخت:
از HttpClient در متد Index برای ارسال درخواست اولیه پرداخت و از RestClient در متد Verify برای تأیید پرداخت استفاده شده است.
مدیریت خطا:
تمام حالتهای احتمالی مانند پاسخ نامعتبر درگاه، قطع اینترنت و لغو پرداخت توسط کاربر مدیریت شدهاند.
استفاده از کوکیها:
از کوکیها برای شناسایی مرورگر کاربر و مدیریت سبد خرید استفاده شده است.
نقاط قوت:
ساختار ماژولار: وظایف مختلف به متدها و سرویسهای جداگانه تقسیم شدهاند.
مدیریت خطا: خطاهای احتمالی به خوبی مدیریت شدهاند و پیامهای کاربرپسند ارائه میشوند.
یکپارچگی: تعامل بین سبد خرید، پرداخت و درگاه پرداخت به خوبی پیادهسازی شده است.
جمعبندی:
این کنترلر طراحی کاملی برای مدیریت فرآیند پرداخت دارد. از ایجاد درخواست پرداخت تا تأیید آن و هدایت کاربر، همه چیز به درستی سازماندهی شده است
پروژه ASP.Net Core MVC (وب و سی شارپ)
پروژه فروشگاه این قسمت زرین پال با iisExpress بروید و پورت 44350 میباشد تا برگشت به پروژه از بانک تس
این کد یک ویو در Razor برای نمایش نتیجه پرداخت طراحی شده است. ویو بر اساس مقدار موجود در ViewBag، نتیجه پرداخت را به کاربر نمایش میدهد. در ادامه توضیح بخشهای مختلف کد آورده شده است:
1. تنظیم عنوان صفحه
csharp
@{
ViewData["Title"] = "نتیجه پرداخت";
}
وظیفه: تنظیم عنوان صفحه (در اینجا "نتیجه پرداخت") که در مرورگر نمایش داده میشود.
این مقدار معمولاً در بخش <title> از فایل Layout نمایش داده میشود.
2. نمایش عنوان صفحه
html
<h2>نتیجه پرداخت</h2>
یک عنوان اصلی (<h2>) برای نمایش عنوان صفحه به کاربران.
3. نمایش نتیجه پرداخت
ویو بر اساس وضعیتهای مختلف، سه سناریو را مدیریت میکند:
الف) پرداخت موفق
csharp
@if (ViewBag.code != null)
{
<div style="background-color: #d4edda; color: #155724; padding: 15px; border: 1px solid #c3e6cb; border-radius: 5px;">
<h4>پرداخت موفق!</h4>
<p>شماره پیگیری پرداخت شما:</p>
<p><strong>@ViewBag.code</strong></p>
<a href="/" style="text-decoration: none; color: white; background-color: #28a745; padding: 10px 15px; border-radius: 5px;">بازگشت به صفحه اصلی</a>
</div>
}
شرط: اگر ViewBag.code مقداردهی شده باشد (یعنی تراکنش موفق باشد).
نمایش پیام: پیام "پرداخت موفق" نمایش داده میشود.
شماره پیگیری: مقدار ViewBag.code (مثلاً شماره پیگیری تراکنش) به کاربر نمایش داده میشود.
دکمه بازگشت: لینکی برای بازگشت کاربر به صفحه اصلی.
ب) پرداخت ناموفق
csharp
else if (ViewBag.ErrorMessage != null)
{
<div style="background-color: #f8d7da; color: #721c24; padding: 15px; border: 1px solid #f5c6cb; border-radius: 5px;">
<h4>پرداخت ناموفق</h4>
<p>@ViewBag.ErrorMessage</p>
<a href="/Cart/Index" style="text-decoration: none; color: white; background-color: #dc3545; padding: 10px 15px; border-radius: 5px;">بازگشت به سبد خرید</a>
</div>
}
شرط: اگر مقدار ViewBag.ErrorMessage تنظیم شده باشد (پرداخت ناموفق یا خطا رخ داده باشد).
نمایش پیام: پیام "پرداخت ناموفق" و توضیحات خطا که از ViewBag.ErrorMessage خوانده میشود.
دکمه بازگشت: لینکی برای بازگشت به صفحه سبد خرید.
ج) وضعیت نامشخص
csharp
else
{
<div style="background-color: #fff3cd; color: #856404; padding: 15px; border: 1px solid #ffeeba; border-radius: 5px;">
<h4>اطلاعات پرداخت در دسترس نیست</h4>
<p>لطفاً دوباره تلاش کنید.</p>
<a href="/" style="text-decoration: none; color: white; background-color: #ffc107; padding: 10px 15px; border-radius: 5px;">بازگشت به صفحه اصلی</a>
</div>
}
شرط: زمانی که ViewBag.code و ViewBag.ErrorMessage هردو null باشند (یعنی پرداخت در وضعیت نامشخص است).
نمایش پیام: پیام "اطلاعات پرداخت در دسترس نیست" به کاربر نمایش داده میشود.
دکمه بازگشت: لینکی برای بازگشت به صفحه اصلی.
4. طراحی بصری با CSS Inline
طراحی بصری با استفاده از style درونخطی انجام شده است:
زمینه رنگی (background-color):
سبز (#d4edda) برای موفقیت.
قرمز (#f8d7da) برای شکست.
زرد (#fff3cd) برای وضعیت نامشخص.
حاشیه (border): حاشیههایی با رنگ مناسب برای هر وضعیت.
دایره کردن گوشهها (border-radius): به منظور زیباتر کردن طراحی.
لینکها: به صورت دکمههای ساده با رنگ و طراحی مناسب.
جمعبندی:
ویو به خوبی وضعیتهای مختلف پرداخت را مدیریت میکند:
پرداخت موفق.
پرداخت ناموفق.
وضعیت نامشخص.
از طراحی ساده و واضح برای نمایش پیامها و اطلاعات استفاده شده است.
امکان بازگشت به صفحه اصلی یا سبد خرید با استفاده از لینکهای مناسب فراهم شده است.
پروژه ASP.Net Core MVC (وب و سی شارپ)
پروژه فروشگاه این قسمت زرین پال با iisExpress بروید و پورت 44350 میباشد تا برگشت به پروژه از بانک تس
کد مربوط به ErrorView برای نمایش پیامهای خطا طراحی شده است و مشخصاً برای زمانی که مشکلی در اتصال به درگاه پرداخت پیش میآید استفاده میشود. در ادامه توضیحات بخشهای مختلف این ویو آورده شده است:
1. تنظیم عنوان صفحه
csharp
@{
ViewData["Title"] = "خطای اتصال";
}
وظیفه: تعیین عنوان صفحه (در اینجا "خطای اتصال").
این عنوان معمولاً در بخش <title> فایل Layout اصلی نمایش داده میشود.
2. نمایش عنوان اصلی
html
<h2>خطا</h2>
این خط یک عنوان اصلی (<h2>) برای صفحه خطا است که به کاربر اعلام میکند مشکلی رخ داده است.
3. نمایش پیام خطا
html
<div style="background-color: #f8d7da; color: #721c24; padding: 15px; border: 1px solid #f5c6cb; border-radius: 5px;">
<h4>مشکلی در اتصال به درگاه پرداخت پیش آمده است.</h4>
<p>@ViewBag.ErrorMessage</p>
<a href="/" style="text-decoration: none; color: white; background-color: #dc3545; padding: 10px 15px; border-radius: 5px;">بازگشت به صفحه اصلی</a>
</div>
توضیحات بخشها:
<div>:
این بخش اصلی ویو است و پیام خطا را در قالب یک باکس طراحیشده نمایش میدهد.
از استایلهای CSS درونخطی برای طراحی بصری استفاده شده است:
رنگ زمینه (background-color): رنگ قرمز کمرنگ (#f8d7da) که نشاندهنده خطاست.
رنگ متن (color): قرمز تیره (#721c24) برای هماهنگی با رنگ زمینه.
حاشیه (border): حاشیهای قرمز با ضخامت مناسب برای تاکید بر خطا.
گرد کردن گوشهها (border-radius): گوشههای گرد برای زیبایی طراحی.
فاصله داخلی (padding): فاصله مناسب داخلی برای خوانایی بهتر.
<h4>:
عنوان خطای اصلی، یعنی "مشکلی در اتصال به درگاه پرداخت پیش آمده است."
<p>:
پیام خطا از طریق ViewBag.ErrorMessage نمایش داده میشود.
این مقدار معمولاً شامل توضیحاتی درباره علت خطا است که از کنترلر تنظیم شده است.
دکمه بازگشت:
لینکی برای هدایت کاربر به صفحه اصلی:
طراحی آن شبیه یک دکمه است.
از رنگ قرمز تیره برای پسزمینه استفاده شده است که با موضوع خطا هماهنگ است.
کاربرد ویو:
این ویو به طور خاص برای نمایش خطاهای مرتبط با مشکلات اتصال به درگاه پرداخت طراحی شده است. از آنجا که پیام خطا از کنترلر ارسال میشود، این ویو به صورت دینامیک پیامهای مختلف خطا را مدیریت میکند.
مزایا:
ساده و کاربردی: طراحی ویو بسیار ساده و مناسب برای نمایش پیامهای خطاست.
کاربرپسند: پیام خطا به کاربر اطلاع میدهد که مشکلی رخ داده است و گزینهای برای بازگشت ارائه میدهد.
استفاده از CSS داخلی: باعث خوانایی و اجرای سریع طراحی میشود.
جمعبندی:
این ویو به خوبی پیامهای خطا را مدیریت میکند و طراحی بصری آن بسیار مناسب و واضح است.
ChartProject.zip
حجم:
17.5M
سلام عید شما مبارک من یک پروژه نمودار ساختم که نام و قیمت کالا به صورت نمودار از دیتابیس می خواند خواستم به شما بدهم تا ازش ایده بگیرید این هم یک هدیه به همه برنامه نویسان asp.net core
Test_Store 18.zip
حجم:
56.8M
پروژه فروشگاه این قسمت ثبت سفارش
پروژه ASP.Net Core MVC (وب و سی شارپ)
پروژه فروشگاه این قسمت ثبت سفارش
namespace Test_Store.Domain.Entities.Orders
این کد مربوط به مدیریت موجودیتهای سفارش (Orders) و جزئیات سفارش (OrderDetails) در یک سیستم فروشگاهی یا مشابه آن است. بیایید آن را گام به گام توضیح دهیم:
---
ساختار اصلی کد
کد شامل دو کلاس اصلی به همراه یک Enum است:
1.
Order: نماینده یک سفارش کلی. 2.
OrderDetail: نماینده جزئیات هر محصول در یک سفارش. 3.
OrderState: یک Enum برای مدیریت وضعیتهای سفارش. --- کلاس
Orderاین کلاس نشاندهنده یک سفارش کلی است و شامل اطلاعاتی نظیر: 1. ارتباط با کاربر (
User): - هر سفارش متعلق به یک کاربر خاص است. - شامل
UserIdبرای شناسایی کاربر. 2. ارتباط با پرداخت (
RequestPay): - هر سفارش یک پرداخت مرتبط دارد. - شامل
RequestPayIdبرای پیگیری پرداخت. 3. وضعیت سفارش (
OrderState): - با استفاده از Enum وضعیت سفارش مشخص میشود (مثلاً پردازششده، لغوشده، تحویلشده). 4. آدرس (
Address): - آدرس تحویل سفارش. 5. جزئیات سفارش (
OrderDetails): - لیستی از محصولات داخل سفارش (ارتباط یک به چند). --- کلاس
OrderDetailاین کلاس نشاندهنده اطلاعات مربوط به هر محصول در یک سفارش است: 1. ارتباط با سفارش (
Order): - هر جزئیات به یک سفارش تعلق دارد. 2. ارتباط با محصول (
Product): - هر جزئیات به یک محصول مشخص تعلق دارد. 3. قیمت (
Price): - قیمت محصول در این سفارش (ممکن است با قیمت اصلی محصول متفاوت باشد). 4. تعداد (
Count): - تعداد محصول موجود در این جزئیات. --- Enum
OrderStateاین Enum برای مدیریت وضعیت سفارشها استفاده میشود: 1.
Processing: - سفارش در حال پردازش است. 2.
Canceled: - سفارش لغو شده است. 3.
Delivered: - سفارش تحویل داده شده است. --- ویژگیهای کلیدی و الگوها - ارثبری از
BaseEntity: - هر دو کلاس
Orderو
OrderDetailاز
BaseEntityبه ارث میبرند. این الگو به احتمال زیاد شامل ویژگیهای مشترک مانند
Id,
CreatedAt, و
UpdatedAtاست. - ارتباطها: -
Orderو
User: ارتباط "یک به یک". -
Orderو
OrderDetail: ارتباط "یک به چند". -
OrderDetailو
Product: ارتباط "یک به یک". --- کاربرد عملی این کد احتمالاً در یک سیستم فروشگاه آنلاین یا مدیریت سفارش استفاده میشود و قابلیتهایی مانند: - مدیریت سفارشها. - مشاهده و تغییر جزئیات محصولات یک سفارش. - پیگیری وضعیت سفارشها (پردازش، لغو، تحویل). ---
پروژه ASP.Net Core MVC (وب و سی شارپ)
پروژه فروشگاه این قسمت ثبت سفارش
Test_Store.Persistence.Context
Test_Store.Application.Interfaces.Contexs
این کد یک پیادهسازی از معماری لایهبندی شده (Layered Architecture) در Entity Framework Core است و برای مدیریت موجودیتهای
Orderو
OrderDetailطراحی شده است. توضیحات گامبهگام بخشهای مختلف این کد در زیر آمده است: --- ۱. `IDataBaseContext`: این اینترفیس ساختار کلی برای مدیریت پایگاه داده را تعریف میکند: - `DbSet<Order>` و `DbSet<OrderDetail>`: این موارد نمایانگر جداول مربوط به
Orderو
OrderDetailدر پایگاه داده هستند. - هدف از اینترفیس: - اینترفیس به شما امکان میدهد تا وابستگیهای خود را از کلاس پایگاه داده جدا کنید و تستپذیری را بهبود بخشید. --- ۲. `DataBaseContext` (پیادهسازی کلاس پایگاه داده): این کلاس از
DbContextارثبری کرده و پایگاه داده را مدیریت میکند: - `DbSet<Order>` و `DbSet<OrderDetail>`: این موارد جداول مرتبط با
Orderو
OrderDetailرا در پایگاه داده نمایش میدهند. - `OnModelCreating`: این متد برای تنظیمات پیشرفتهی مدلسازی پایگاه داده استفاده میشود: 1. ارتباط `Order` و `User`: csharp modelBuilder.Entity<Order>() .HasOne(p => p.User) .WithMany(p => p.Orders) .OnDelete(DeleteBehavior.NoAction); - تعریف ارتباط "یک به چند" (یک کاربر میتواند چند سفارش داشته باشد). - با
OnDelete(DeleteBehavior.NoAction)حذف آبشاری غیرفعال شده است. 2. ارتباط `Order` و `RequestPay`: csharp modelBuilder.Entity<Order>() .HasOne(p => p.RequestPay) .WithMany(p => p.Orders) .OnDelete(DeleteBehavior.NoAction); - مشابه ارتباط قبلی، این ارتباط نیز "یک به چند" است. - حذف آبشاری در اینجا نیز غیرفعال شده است. --- ۳. فیلترهای کوئری (`ApplyQueryFilter`): این متد برای اعمال فیلتر پیشفرض در جداول استفاده میشود: csharp private void ApplyQueryFilter(ModelBuilder modelBuilder) { modelBuilder.Entity<Order>().HasQueryFilter(p => !p.IsRemoved); modelBuilder.Entity<OrderDetail>().HasQueryFilter(p => !p.IsRemoved); } - `HasQueryFilter`: - این فیلتر اطمینان میدهد که فقط رکوردهایی که ویژگی
IsRemovedآنها
falseاست در نتایج نمایش داده میشوند. - بسیار مفید است برای پنهان کردن رکوردهای حذفشده بهصورت منطقی (Soft Delete). --- ۴. کاربرد کلی کد: 1. مدیریت سفارشها و جزئیات آنها: - جداول
Ordersو
OrderDetailsنمایانگر اطلاعات مربوط به سفارشات و محصولات مربوط به آنها هستند. 2. پشتیبانی از تستپذیری: - با استفاده از اینترفیس `IDataBaseContext`، وابستگیها از کلاس پایگاه داده جدا شده و امکان جایگزینی پایگاه داده با نسخه تستی فراهم شده است. 3. پیشگیری از حذف آبشاری: - حذف آبشاری (Cascade Delete) بهصورت پیشفرض غیرفعال شده است تا از حذف ناخواسته رکوردهای وابسته جلوگیری شود. 4. مدیریت Soft Delete: - با استفاده از فیلترهای
HasQueryFilter`، رکوردهایی که حذف منطقی شدهاند (دارای `IsRemoved = trueهستند) از نتایج عادی پنهان میشوند. --- ۵. مزایا: - ساختارمند: تفکیک مسئولیتها در قالب اینترفیس و کلاس پیادهسازی. - قابلیت گسترش: امکان افزودن تنظیمات بیشتر در آینده. - بهینهسازی کوئریها: با استفاده از فیلترهای پیشفرض. --- جمعبندی: این کد از روشهای استاندارد و پیشرفته EF Core برای مدیریت موجودیتها و ارتباطات بین جداول استفاده کرده است. اگر نیاز به گسترش این کد دارید، میتوان ویژگیهای دیگری مثل لاگینگ یا تنظیمات پیشرفتهتر را اضافه کرد.