eitaa logo
پروژه ASP.Net Core MVC (وب و سی شارپ)
120 دنبال‌کننده
168 عکس
38 ویدیو
376 فایل
❁﷽❁ آموزش 📖 برنامه نویسی ASP.Net Core MVC (وب و سی شارپ) Admin: @alialirezapanahi برنامه نویسی برنامه نویسی سی شارپ eitaa.com/sisharpapp برنامه نویسی وب eitaa.com/aspdatnet ویراستی virasty.com/alialirezapanahi آپارات aparat.com/alialirezapanahi
مشاهده در ایتا
دانلود
بیایید کد ProductsController را که برای نمایش لیست محصولات و جزئیات هر محصول استفاده می‌شود بررسی کنیم. توضیحات کد: تعریف کلاس: csharp public class ProductsController : Controller { private readonly IProductFacad _productFacad; public ProductsController(IProductFacad productFacad) { _productFacad = productFacad; } } کلاس ProductsController از کلاس پایه Controller ارث‌بری می‌کند. یک فیلد خصوصی _productFacad از نوع IProductFacad تعریف شده است. سازنده کلاس ProductsController فیلد _productFacad را با استفاده از تزریق وابستگی مقداردهی اولیه می‌کند. متد Index: csharp public IActionResult Index(int page = 1) { return View(_productFacad.GetProductForSiteService.Execute(page).Data); } این متد برای نمایش لیست محصولات استفاده می‌شود. پارامتر page شماره صفحه فعلی را مشخص می‌کند و مقدار پیش‌فرض آن ۱ است. از سرویس GetProductForSiteService برای دریافت لیست محصولات صفحه‌بندی شده استفاده می‌کند. داده‌های دریافت شده را به ویو ارسال می‌کند. متد Detail: csharp public IActionResult Detail(long Id) { return View(_productFacad.GetProductDetailForSiteService.Execute(Id).Data); } این متد برای نمایش جزئیات یک محصول خاص استفاده می‌شود. پارامتر Id شناسه محصول را مشخص می‌کند. از سرویس GetProductDetailForSiteService برای دریافت جزئیات محصول استفاده می‌کند. داده‌های دریافت شده را به ویو ارسال می‌کند. نتیجه‌گیری: کنترلر ProductsController به شما امکان می‌دهد تا لیست محصولات و جزئیات هر محصول را در سایت خود نمایش دهید. شامل دو متد Index برای نمایش لیست محصولات به صورت صفحه‌بندی شده و Detail برای نمایش جزئیات یک محصول خاص است. این متدها از سرویس‌های مختلف ProductFacad برای دریافت داده‌های مورد نیاز استفاده می‌کنند و آن‌ها را به ویو مربوطه ارسال می‌کنند.
بیایید کد ویوی نمایش لیست محصولات را که برای نمایش آرشیو محصولات در سایت استفاده می‌شود بررسی کنیم. توضیحات کد: اضافه کردن فضای نام‌ها و مدل: csharp @using Test_Store.Application.Services.Products.Queries.GetProductForSite; @model ResultProductForSiteDto; @using برای استفاده از فضای نام سرویس‌های مورد نیاز برای دریافت لیست محصولات. @model برای تعریف مدل داده‌ای که به ویو ارسال می‌شود. در اینجا مدل ResultProductForSiteDto است که شامل لیست محصولات و سایر اطلاعات مربوط به صفحه‌بندی است. ViewData و Layout: csharp @{ ViewData["Title"] = "Index"; Layout = "~/Views/Shared/_Layout.cshtml"; } ViewData["Title"]: عنوان صفحه را به "Index" تنظیم می‌کند. Layout: از Layout مشخص شده برای این صفحه استفاده می‌کند. ساختار اصلی HTML: بخش‌های مختلف صفحه شامل هدر، بدنه، و نمایش لیست محصولات. نمایش آرشیو محصولات: html <div class="col-lg-12 col-md-12 col-xs-12 pl"> <div class="shop-archive-content mt-3 d-block"> <div class="archive-header"> <h2 class="archive-header-title">آرشیو محصولات</h2> <div class="sort-tabs mt-0 d-inline-block pr"> <h4>مرتب‌سازی بر اساس :</h4> </div> <div class="nav-sort-tabs-res"> <ul class="nav sort-tabs-options" id="myTab" role="tablist"> <li class="nav-item"> <a class="nav-link active" id="Most-visited-tab" data-toggle="tab" href="-visited" role="tab" aria-controls="Most-visited" aria-selected="true">پربازدیدترین</a> </li> <li class="nav-item"> <a class="nav-link" id="Bestselling-tab" data-toggle="tab" href="" role="tab" aria-controls="Bestselling" aria-selected="false">پرفروش‌ترین‌</a> </li> <li class="nav-item"> <a class="nav-link" id="Most-Popular-tab" data-toggle="tab" href="-Popular" role="tab" aria-controls="Most-Popular" aria-selected="false">محبوب‌ترین</a> </li> <li class="nav-item"> <a class="nav-link" id="newest-tab" data-toggle="tab" href="" role="tab" aria-controls="newest" aria-selected="false">جدیدترین</a> </li> <li class="nav-item"> <a class="nav-link" id="cheapest-tab" data-toggle="tab" href="" role="tab" aria-controls="cheapest" aria-selected="false">ارزان‌ترین</a> </li> <li class="nav-item"> <a class="nav-link" id="most-expensive-tab" data-toggle="tab" href="-expensive" role="tab" aria-controls="most-expensive" aria-selected="false">گران‌ترین</a> </li> </ul> </div> </div> <div class="product-items"> <div class="tab-content" id="myTabContent"> @foreach (var item in Model.Products) { <div class="tab-pane fade show active" id="Most-visited" role="tabpanel" aria-labelledby="Most-visited-tab"> <div class="row"> <div class="col-lg-3 col-md-3 col-xs-12 order-1 d-block mb-3"> <section class="product-box product product-type-simple"> <div class="thumb"> <a href="~/products/detail/@item.Id" class="d-block"> <div class="product-rate"> @for (int i = 1; i <= item.Star; i++) { <i class="fa fa-star active"></i> } @for (int i = 1; i <= (5 - item.Star); i++) { <i class="fa fa-star"></i>
} </div> <img src="~/@item.ImageSrc"> </a> </div> <div class="title"> <a href="~/products/detail/@item.Id">@item.Title</a> </div> <div class="price"> <span class="amount"> @item.Price.ToString("n0") <span>تومان</span> </span> </div> </section> </div> </div> </div> } </div> </div> <div class="pagination-product"> <nav aria-label="Page navigation example"> <ul class="pagination"> <li class="page-item"> <a class="page-link" href="#" aria-label="Previous"> <span aria-hidden="true">«</span> </a> </li> <li class="page-item"> <a class="page-link active" href="#">1</a> </li> <li class="page-item"> <a class="page-link" href="#">2</a> </li> <li class="page-item"> <a class="page-link" href="#">3</a> </li> <li class="page-item"> <a class="page-link" href="#" aria-label="Next"> <span aria-hidden="true">»</span> </a> </li> </ul> </nav> </div> </div> </div> هدر صفحه: شامل عنوان صفحه و تب‌های مرتب‌سازی براساس معیارهای مختلف (پربازدیدترین، پرفروش‌ترین، محبوب‌ترین، جدیدترین، ارزان‌ترین، گران‌ترین). نمایش محصولات: از foreach برای پیمایش مدل (لیست محصولات) و نمایش اطلاعات هر محصول استفاده شده است. هر محصول شامل تصویر، عنوان، نرخ‌بندی (ستاره‌ها)، و قیمت است. تب‌های مرتب‌سازی براساس معیارهای مختلف استفاده شده‌اند تا کاربران بتوانند محصولات را بر اساس معیارهای مختلف مشاهده کنند. صفحه‌بندی (Pagination): از عناصر HTML و CSS برای نمایش ناوبری صفحات استفاده شده است. به کاربران این امکان را می‌دهد تا بین صفحات مختلف محصولات جابجا شوند. نتیجه‌گیری: این کد به شما امکان می‌دهد تا لیست محصولات را به صورت آرشیوی و با قابلیت مرتب‌سازی بر اساس معیارهای مختلف نمایش دهید. شامل تب‌های مرتب‌سازی، نمایش محصولات به همراه تصویر و اطلاعات مرتبط، و ناوبری صفحات است. این طراحی به کاربران کمک می‌کند تا به راحتی محصولات مورد نظر خود را بیابند و مشاهده کنند.
بیایید این کد را که برای نمایش جزئیات یک محصول خاص در سایت استفاده می‌شود بررسی کنیم. توضیحات کد: اضافه کردن فضای نام‌ها و مدل: csharp @using Test_Store.Application.Services.Products.Queries.GetProductDetailForSite; @model ProductDetailForSiteDto; @using برای استفاده از فضای نام سرویس‌های مورد نیاز برای دریافت جزئیات محصول. @model برای تعریف مدل داده‌ای که به ویو ارسال می‌شود. در اینجا مدل ProductDetailForSiteDto است که شامل جزئیات محصول است. ViewData و Layout: csharp @{ ViewData["Title"] = "Detail"; Layout = "~/Views/Shared/_Layout.cshtml"; } ViewData["Title"]: عنوان صفحه را به "Detail" تنظیم می‌کند. Layout: از Layout مشخص شده برای این صفحه استفاده می‌کند. ساختار اصلی HTML: بخش‌های مختلف صفحه شامل مدال، گالری تصاویر، عنوان محصول، ویژگی‌ها، نقد و بررسی، و مشخصات فنی. نمایش تصاویر محصول در مدال (Modal): html <div class="modal fade" id="more-product" tabindex="-1" role="dialog" aria-labelledby="exampleModalCenterTitle" aria-hidden="true"> <div class="modal-dialog modal-dialog-centered more-product" role="document"> <div class="modal-content"> <div class="modal-body"> <div id="custom-events"> @foreach (var item in Model.Images) { <a href="~/@item"> <img src="~/@item" /> </a> } </div> </div> </div> </div> </div> این بخش شامل یک مدال (Modal) است که تصاویر محصول را نمایش می‌دهد. از @foreach برای پیمایش مدل (لیست تصاویر) و نمایش هر تصویر استفاده شده است. گالری تصاویر محصول: html <div class="gallery-item"> <div class="gallery-img"> <a href="#"> <img class="zoom-img" id="img-product-zoom" src="~/@Model.Images.FirstOrDefault()" data-zoom-image="/@Model.Images.FirstOrDefault()" width="411" /> <div id="gallery_01f" style="width:420px;float:right;"> </a> <ul class="gallery-items owl-carousel owl-theme" id="gallery-slider"> @foreach (var item in Model.Images) { <li class="item"> <a href="#" class="elevatezoom-gallery active" data-update="" data-image="/@item" data-zoom-image="/@item"> <img src="~/@item" width="100" /> </a> </li> } </ul> </div> </div> این بخش شامل گالری تصاویر محصول است که از owl-carousel برای نمایش تصاویر به صورت اسلایدری استفاده می‌شود. تصویر اصلی با قابلیت زوم و تصاویر کوچک در پایین آن نمایش داده می‌شوند. عنوان و مشخصات کلی محصول: html <div class="product-headline"> <h1 class="product-title"> @Model.Title </h1> <div class="product-guaranteed text-success"> 12 <span>فروش موفق</span> </div> </div> این بخش شامل عنوان محصول و تعداد فروش موفق آن است. ویژگی‌های محصول: html <div class="product-params pt-3"> <ul data-title="ویژگی‌های محصول"> @foreach (var item in Model.Features.Take(5)) { <li> <span>@item.DisplayName: </span> <span>@item.Value</span> </li> } </ul> </div> این بخش شامل لیستی از ویژگی‌های محصول است که فقط پنج ویژگی اول نمایش داده می‌شوند. نقد و بررسی اجمالی محصول: html <h2 class="params-headline">نقد و بررسی اجمالی</h2> <section class="content-expert-summary"> <div class="mask pm-3"> <div class="mask-text"> @Model.Description </div> <a href="#" class="mask-handler"> <span class="show-more">+ ادامه مطلب</span> <span class="show-less">- بستن</span> </a> <div class="shadow-box"></div> </div> </section> این بخش شامل نقد و بررسی اجمالی محصول است که در صورت طولانی بودن متن، قابلیت نمایش ادامه متن با کلیک روی لینک "ادامه مطلب" فراهم می‌شود. مشخصات فنی محصول:
html <article> <h2 class="params-headline"> مشخصات فنی <span>Samsung Galaxy Note 10 Dual SIM 256GB Mobile Phone</span> </h2> <section> <ul class="params-list"> @foreach (var item in Model.Features) { <li class="params-list-item"> <div class="params-list-key"> <span class="block"> @item.DisplayName </span> </div> <div class="params-list-value"> <span class="block"> @item.Value </span> </div> </li> } </ul> </section> </article> این بخش شامل لیست کامل ویژگی‌های فنی محصول است. بخش اسکریپت‌ها: csharp @section Scripts { <script src="~/SiteTemplate/assets/js/vendor/lightgallery-all.js"></script> <script src="~/SiteTemplate/assets/js/vendor/jquery.ez-plus.js"></script> } این بخش شامل لینک اسکریپت‌های لازم برای نمایش گالری تصاویر و قابلیت زوم تصاویر است. نتیجه‌گیری: این کد به شما امکان می‌دهد تا جزئیات کامل یک محصول را به همراه تصاویر، ویژگی‌ها، نقد و بررسی، و مشخصات فنی در سایت خود نمایش دهید. شامل مدال برای نمایش تصاویر، گالری تصاویر محصول، عنوان و مشخصات کلی، ویژگی‌ها، نقد و بررسی اجمالی، و مشخصات فنی محصول است. این طراحی به کاربران کمک می‌کند تا به راحتی به اطلاعات کامل و دقیقی از محصول دسترسی داشته باشند.
بیایید کد این سرویس را که برای دریافت لیست محصولات جهت نمایش در سایت استفاده می‌شود بررسی کنیم. توضیحات کد: تعریف اینترفیس IGetProductForSiteService: csharp public interface IGetProductForSiteService { ResultDto<ResultProductForSiteDto> Execute(int Page); } این اینترفیس یک متد Execute تعریف می‌کند که یک پارامتر Page دریافت می‌کند و یک ResultDto<ResultProductForSiteDto> را بازمی‌گرداند. کلاس GetProductForSiteService: فیلدهای خصوصی و سازنده: csharp public class GetProductForSiteService : IGetProductForSiteService { private readonly IDataBaseContext _context; public GetProductForSiteService(IDataBaseContext context) { _context = context; } } این کلاس شامل یک فیلد خصوصی _context از نوع IDataBaseContext و یک سازنده است که این فیلد را مقداردهی اولیه می‌کند. متد Execute: csharp public ResultDto<ResultProductForSiteDto> Execute(int Page) { int totalRow = 0; var products = _context.Products .Include(p => p.ProductImages) .ToPaged(Page, 5, out totalRow); Random rd = new Random(); return new ResultDto<ResultProductForSiteDto> { Data = new ResultProductForSiteDto { TotalRow = totalRow, Products = products.Select(p => new ProductForSiteDto { Id = p.Id, Star = rd.Next(1, 5), Title = p.Name, ImageSrc = p.ProductImages.FirstOrDefault().Src, Price = p.Price }).ToList(), }, IsSuccess = true, }; } این متد لیست محصولات را از دیتابیس دریافت می‌کند و سپس آن‌ها را به صورت صفحه‌بندی شده (paging) بازمی‌گرداند. از Include برای بارگذاری اطلاعات مرتبط (تصاویر محصول) استفاده می‌شود. متد ToPaged برای انجام عملیات صفحه‌بندی استفاده می‌شود و totalRow تعداد کل رکوردها را محاسبه می‌کند. از کلاس Random برای ایجاد یک عدد تصادفی بین ۱ تا ۵ برای ستاره‌های محصول استفاده می‌شود. نتیجه به عنوان یک ResultDto<ResultProductForSiteDto> شامل محصولات صفحه‌بندی شده و تعداد کل رکوردها بازگردانده می‌شود. کلاس ResultProductForSiteDto: csharp public class ResultProductForSiteDto { public List<ProductForSiteDto> Products { get; set; } public int TotalRow { get; set; } } این کلاس شامل جزئیات مربوط به صفحه‌بندی مانند تعداد کل رکوردها و لیست محصولات است. کلاس ProductForSiteDto: csharp public class ProductForSiteDto { public long Id { get; set; } public string Title { get; set; } public string ImageSrc { get; set; } public int Star { get; set; } public int Price { get; set; } } این کلاس شامل اطلاعات محصول مانند شناسه، نام، مسیر تصویر، تعداد ستاره‌ها و قیمت است. نتیجه‌گیری: این کد به شما امکان می‌دهد تا لیست محصولات را به صورت صفحه‌بندی شده برای نمایش در سایت دریافت کنید. از اینترفیس IGetProductForSiteService برای تعریف قرارداد و از کلاس GetProductForSiteService برای پیاده‌سازی این قرارداد استفاده می‌شود. اطلاعات محصولات شامل جزئیات صفحه‌بندی و محصولات بازگردانده شده است که به کاربران سایت کمک می‌کند تا به راحتی محصولات را مشاهده کنند.
بیایید کد سرویس GetProductDetailForSiteService و اینترفیس IGetProductDetailForSiteService را که برای دریافت جزئیات محصول جهت نمایش در سایت استفاده می‌شود بررسی کنیم. توضیحات کد: تعریف اینترفیس IGetProductDetailForSiteService: csharp public interface IGetProductDetailForSiteService { ResultDto<ProductDetailForSiteDto> Execute(long Id); } این اینترفیس یک متد Execute تعریف می‌کند که یک پارامتر Id دریافت می‌کند و یک ResultDto<ProductDetailForSiteDto> را بازمی‌گرداند. کلاس GetProductDetailForSiteService: فیلدهای خصوصی و سازنده: csharp public class GetProductDetailForSiteService : IGetProductDetailForSiteService { private readonly IDataBaseContext _context; public GetProductDetailForSiteService(IDataBaseContext context) { _context = context; } } این کلاس شامل یک فیلد خصوصی _context از نوع IDataBaseContext و یک سازنده است که این فیلد را مقداردهی اولیه می‌کند. متد Execute: csharp public ResultDto<ProductDetailForSiteDto> Execute(long Id) { var Product = _context.Products .Include(p => p.Category) .ThenInclude(p => p.ParentCategory) .Include(p => p.ProductImages) .Include(p => p.ProductFeatures) .Where(p => p.Id == Id).FirstOrDefault(); if (Product == null) { throw new Exception("Product Not Found....."); } return new ResultDto<ProductDetailForSiteDto>() { Data = new ProductDetailForSiteDto { Brand = Product.Brand, Category = $"{Product.Category.ParentCategory.Name} - {Product.Category.Name}", Description = Product.Description, Id = Product.Id, Price = Product.Price, Title = Product.Name, Images = Product.ProductImages.Select(p => p.Src).ToList(), Features = Product.ProductFeatures.Select(p => new ProductDetailForSite_FeaturesDto { DisplayName = p.DisplayName, Value = p.Value, }).ToList(), }, IsSuccess = true, }; } این متد اطلاعات محصول را با استفاده از شناسه محصول Id از دیتابیس دریافت می‌کند. از Include و ThenInclude برای بارگذاری اطلاعات مرتبط استفاده می‌شود (مثلاً دسته‌بندی‌ها، ویژگی‌های محصول، تصاویر محصول). اگر محصول مورد نظر پیدا نشود، یک استثناء (Exception) پرتاب می‌شود. نتیجه به عنوان یک ResultDto<ProductDetailForSiteDto> شامل جزئیات محصول بازگردانده می‌شود. کلاس ProductDetailForSiteDto: csharp public class ProductDetailForSiteDto { public long Id { get; set; } public string Title { get; set; } public string Brand { get; set; } public string Category { get; set; } public string Description { get; set; } public int Price { get; set; } public List<string> Images { get; set; } public List<ProductDetailForSite_FeaturesDto> Features { get; set; } } این کلاس شامل جزئیات محصول مانند شناسه، نام، برند، دسته‌بندی، توضیحات، قیمت، تصاویر و ویژگی‌های محصول است. کلاس ProductDetailForSite_FeaturesDto: csharp public class ProductDetailForSite_FeaturesDto { public string DisplayName { get; set; } public string Value { get; set; } } این کلاس شامل اطلاعات ویژگی‌های محصول است که شامل نام نمایشی ویژگی و مقدار آن است. نتیجه‌گیری: این کد به شما امکان می‌دهد تا جزئیات کامل یک محصول را با استفاده از شناسه آن دریافت کنید. از اینترفیس IGetProductDetailForSiteService برای تعریف قرارداد و از کلاس GetProductDetailForSiteService برای پیاده‌سازی این قرارداد استفاده می‌شود. جزئیات محصول شامل ویژگی‌ها، تصاویر، دسته‌بندی، و سایر اطلاعات مرتبط است که به کاربران سایت کمک می‌کند تا اطلاعات کامل و دقیقی از محصولات داشته باشند.
بیایید کد کلاس ProductFacad را که به عنوان فاساد (Facade) برای مدیریت عملیات‌های مرتبط با محصولات در سیستم استفاده می‌شود، بررسی کنیم. توضیحات کد: تعریف کلاس: csharp public class ProductFacad : IProductFacad { private readonly IDataBaseContext _context; private readonly IHostingEnvironment _environment; public ProductFacad(IDataBaseContext context, IHostingEnvironment hostingEnvironment) { _context = context; _environment = hostingEnvironment; } } این کلاس ProductFacad از اینترفیس IProductFacad پیاده‌سازی می‌کند. دو فیلد خصوصی _context و _environment تعریف شده‌اند که از طریق سازنده مقداردهی می‌شوند. _context برای دسترسی به دیتابیس و _environment برای دسترسی به محیط میزبانی استفاده می‌شود. سرویس‌های مختلف فاساد: AddNewCategoryService: csharp private AddNewCategoryService _addNewCategory; public AddNewCategoryService AddNewCategoryService { get { return _addNewCategory = _addNewCategory ?? new AddNewCategoryService(_context); } } این ویژگی یک نمونه از AddNewCategoryService را بازمی‌گرداند. اگر نمونه قبلاً ایجاد نشده باشد، آن را ایجاد می‌کند. IGetCategoriesService: csharp private IGetCategoriesService _getCategoriesService; public IGetCategoriesService GetCategoriesService { get { return _getCategoriesService = _getCategoriesService ?? new GetCategoriesService(_context); } } این ویژگی یک نمونه از IGetCategoriesService را بازمی‌گرداند. اگر نمونه قبلاً ایجاد نشده باشد، آن را ایجاد می‌کند. AddNewProductService: csharp private AddNewProductService _addNewProductService; public AddNewProductService AddNewProductService { get { return _addNewProductService = _addNewProductService ?? new AddNewProductService(_context, _environment); } } این ویژگی یک نمونه از AddNewProductService را بازمی‌گرداند. اگر نمونه قبلاً ایجاد نشده باشد، آن را ایجاد می‌کند. IGetAllCategoriesService: csharp private IGetAllCategoriesService _getAllCategoriesService; public IGetAllCategoriesService GetAllCategoriesService { get { return _getAllCategoriesService = _getAllCategoriesService ?? new GetAllCategoriesService(_context); } } این ویژگی یک نمونه از IGetAllCategoriesService را بازمی‌گرداند. اگر نمونه قبلاً ایجاد نشده باشد، آن را ایجاد می‌کند. IGetProductForAdminService: csharp private IGetProductForAdminService _getProductForAdminService; public IGetProductForAdminService GetProductForAdminService { get { return _getProductForAdminService = _getProductForAdminService ?? new GetProductForAdminService(_context); } } این ویژگی یک نمونه از IGetProductForAdminService را بازمی‌گرداند. اگر نمونه قبلاً ایجاد نشده باشد، آن را ایجاد می‌کند. IGetProductDetailForAdminService: csharp private IGetProductDetailForAdminService _getProductDetailForAdminService; public IGetProductDetailForAdminService GetProductDetailForAdminService { get { return _getProductDetailForAdminService = _getProductDetailForAdminService ?? new GetProductDetailForAdminService(_context); } } این ویژگی یک نمونه از IGetProductDetailForAdminService را بازمی‌گرداند. اگر نمونه قبلاً ایجاد نشده باشد، آن را ایجاد می‌کند. IGetProductForSiteService: csharp private IGetProductForSiteService _getProductForSiteService; public IGetProductForSiteService GetProductForSiteService { get { return _getProductForSiteService = _getProductForSiteService ?? new GetProductForSiteService(_context); } } این ویژگی یک نمونه از IGetProductForSiteService را بازمی‌گرداند. اگر نمونه قبلاً ایجاد نشده باشد، آن را ایجاد می‌کند. IGetProductDetailForSiteService: csharp private IGetProductDetailForSiteService _getProductDetailForSiteService; public IGetProductDetailForSiteService GetProductDetailForSiteService { get { return _getProductDetailForSiteService = _getProductDetailForSiteService ?? new GetProductDetailForSiteService(_context); } } این ویژگی یک نمونه از IGetProductDetailForSiteService را بازمی‌گرداند. اگر نمونه قبلاً ایجاد نشده باشد، آن را ایجاد می‌کند.
نتیجه‌گیری: این کلاس ProductFacad به عنوان یک فاساد عمل می‌کند که دسترسی به سرویس‌های مختلف مربوط به محصولات را فراهم می‌کند. با استفاده از ویژگی‌های مختلف، این کلاس سرویس‌هایی مانند اضافه کردن دسته‌بندی، دریافت دسته‌بندی‌ها، اضافه کردن محصول، دریافت اطلاعات محصولات برای ادمین‌ها و سایت، و دریافت جزئیات محصولات برای سایت را ارائه می‌دهد. این طراحی کمک می‌کند تا عملیات‌های پیچیده به صورت ساده‌تر و یکپارچه‌تر مدیریت شوند.
بیایید کد این اینترفیس IProductFacad را که به منظور تعریف قراردادهای مختلف برای مدیریت عملیات‌های مرتبط با محصولات استفاده می‌شود بررسی کنیم. توضیحات کد: تعریف نام‌فضا: csharp namespace Test_Store.Application.Interfaces.FacadPatterns این خط کد نام‌فضایی (namespace) به نام Test_Store.Application.Interfaces.FacadPatterns تعریف می‌کند که اینترفیس IProductFacad در آن قرار دارد. تعریف اینترفیس IProductFacad: csharp public interface IProductFacad { AddNewCategoryService AddNewCategoryService { get; } IGetCategoriesService GetCategoriesService { get; } AddNewProductService AddNewProductService { get; } IGetAllCategoriesService GetAllCategoriesService { get; } IGetProductForAdminService GetProductForAdminService { get; } IGetProductDetailForAdminService GetProductDetailForAdminService { get; } IGetProductForSiteService GetProductForSiteService { get; } IGetProductDetailForSiteService GetProductDetailForSiteService { get; } } ویژگی‌های اینترفیس: AddNewCategoryService: csharp AddNewCategoryService AddNewCategoryService { get; } این ویژگی یک شیء از نوع AddNewCategoryService بازمی‌گرداند که برای اضافه کردن دسته‌بندی جدید استفاده می‌شود. IGetCategoriesService: csharp IGetCategoriesService GetCategoriesService { get; } این ویژگی یک شیء از نوع IGetCategoriesService بازمی‌گرداند که برای دریافت دسته‌بندی‌ها استفاده می‌شود. AddNewProductService: csharp AddNewProductService AddNewProductService { get; } این ویژگی یک شیء از نوع AddNewProductService بازمی‌گرداند که برای اضافه کردن محصول جدید استفاده می‌شود. IGetAllCategoriesService: csharp IGetAllCategoriesService GetAllCategoriesService { get; } این ویژگی یک شیء از نوع IGetAllCategoriesService بازمی‌گرداند که برای دریافت همه دسته‌بندی‌ها استفاده می‌شود. IGetProductForAdminService: csharp IGetProductForAdminService GetProductForAdminService { get; } این ویژگی یک شیء از نوع IGetProductForAdminService بازمی‌گرداند که برای دریافت اطلاعات محصولات برای مدیران استفاده می‌شود. IGetProductDetailForAdminService: csharp IGetProductDetailForAdminService GetProductDetailForAdminService { get; } این ویژگی یک شیء از نوع IGetProductDetailForAdminService بازمی‌گرداند که برای دریافت جزئیات محصولات برای مدیران استفاده می‌شود. IGetProductForSiteService: csharp IGetProductForSiteService GetProductForSiteService { get; } این ویژگی یک شیء از نوع IGetProductForSiteService بازمی‌گرداند که برای دریافت محصولات برای نمایش در سایت استفاده می‌شود. IGetProductDetailForSiteService: csharp IGetProductDetailForSiteService GetProductDetailForSiteService { get; } این ویژگی یک شیء از نوع IGetProductDetailForSiteService بازمی‌گرداند که برای دریافت جزئیات محصولات برای نمایش در سایت استفاده می‌شود. نتیجه‌گیری: این اینترفیس IProductFacad به شما امکان می‌دهد تا قراردادهای مختلف برای مدیریت عملیات‌های مرتبط با محصولات را تعریف کنید. با استفاده از این اینترفیس، می‌توانید به صورت یکپارچه و ساده به عملیات‌های مختلفی مانند اضافه کردن دسته‌بندی، دریافت دسته‌بندی‌ها، اضافه کردن محصول، دریافت اطلاعات محصولات برای ادمین‌ها و سایت، و دریافت جزئیات محصولات برای سایت دسترسی داشته باشید. این طراحی کمک می‌کند تا عملیات‌های پیچیده به صورت ساده‌تر و یکپارچه‌تر مدیریت شوند.
Test_Store 10.zip
حجم: 54.8M
متصل کردن منو به دیتابیس و مدیریت منو فروشگگاه در ادمین و پیاده سازی جستجو
بیایید این کد را که برای مدیریت منوها در یک سیستم استفاده می‌شود بررسی کنیم. توضیحات کد: تعریف اینترفیس IGetMenuItemService: csharp public interface IGetMenuItemService { ResultDto<List<MenuItemDto>> Execute(); } این اینترفیس یک متد Execute تعریف می‌کند که هیچ پارامتری دریافت نمی‌کند و یک ResultDto<List<MenuItemDto>> را بازمی‌گرداند. این متد به منظور دریافت لیست آیتم‌های منو استفاده می‌شود. کلاس GetMenuItemService: فیلدهای خصوصی و سازنده: csharp public class GetMenuItemService : IGetMenuItemService { private readonly IDataBaseContext _context; public GetMenuItemService(IDataBaseContext context) { _context = context; } } این کلاس شامل یک فیلد خصوصی _context از نوع IDataBaseContext و یک سازنده است که این فیلد را مقداردهی اولیه می‌کند. متد Execute: csharp public ResultDto<List<MenuItemDto>> Execute() { var category = _context.Categories .Include(p => p.SubCategories) .Where(p => p.ParentCategoryId == null) .ToList() .Select(p => new MenuItemDto { CatId = p.Id, Name = p.Name, Child = p.SubCategories.ToList().Select(child => new MenuItemDto { CatId = child.Id, Name = child.Name, }).ToList(), }).ToList(); return new ResultDto<List<MenuItemDto>>() { Data = category, IsSuccess = true, }; } این متد لیست دسته‌بندی‌ها را از دیتابیس دریافت می‌کند و سپس آن‌ها را به صورت یک لیست MenuItemDto بازمی‌گرداند. از Include برای بارگذاری اطلاعات مرتبط (زیردسته‌ها) استفاده می‌شود. از Where برای فیلتر کردن دسته‌بندی‌ها که ParentCategoryId آن‌ها null است استفاده می‌شود. هر دسته‌بندی به یک MenuItemDto تبدیل می‌شود که شامل شناسه دسته‌بندی (CatId)، نام دسته‌بندی (Name) و لیست زیردسته‌ها (Child) است. نتیجه به عنوان یک ResultDto<List<MenuItemDto>> شامل لیست دسته‌بندی‌ها و وضعیت موفقیت‌آمیز بودن عملیات بازگردانده می‌شود. کلاس MenuItemDto: csharp public class MenuItemDto { public long CatId { get; set; } public string Name { get; set; } public List<MenuItemDto> Child { get; set; } } این کلاس شامل جزئیات آیتم‌های منو است. CatId: شناسه دسته‌بندی. Name: نام دسته‌بندی. Child : لیستی از آیتم‌های زیردسته. نتیجه‌گیری: این کد به شما امکان می‌دهد تا لیست دسته‌بندی‌ها و زیردسته‌ها را از دیتابیس دریافت کنید و به صورت یک ساختار درختی (Nested Structure) برای مدیریت منوها بازگردانید. از اینترفیس IGetMenuItemService برای تعریف قرارداد و از کلاس GetMenuItemService برای پیاده‌سازی این قرارداد استفاده می‌شود. داده‌ها به صورت یک لیست MenuItemDto بازگردانده می‌شوند که شامل دسته‌بندی‌ها و زیردسته‌های آن‌ها است.