بیایید کد ویوی نمایش لیست محصولات را که برای نمایش آرشیو محصولات در سایت استفاده میشود بررسی کنیم.
توضیحات کد:
اضافه کردن فضای نامها و مدل:
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="#Most-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="#Bestselling" 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="#Most-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="#newest" 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="#cheapest" 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="#most-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 بازگردانده میشوند که شامل دستهبندیها و زیردستههای آنها است.
بیایید کد کلاس GetMenu که به عنوان یک ViewComponent در پروژه ASP.NET Core استفاده میشود را بررسی کنیم. همچنین، توضیح خواهیم داد که پوشه ViewComponents و کلاس GetMenu چه کاربردی دارند.
ViewComponents در ASP.NET Core:
ViewComponents در ASP.NET Core
به شما امکان میدهند تا بخشهای قابل تکرار و قابل استفاده مجدد از رابط کاربری (UI) را ایجاد کنید. مشابه Partial Views هستند اما با قابلیتها و امکانات بیشتر. ViewComponents میتوانند منطق خود را داشته باشند و دادهها را از سرویسها یا دیتابیس دریافت کنند و آنها را به View ارسال کنند.
توضیحات کد:
تعریف کلاس GetMenu:
csharp
public class GetMenu : ViewComponent
{
private readonly IGetMenuItemService _getMenuItemService;
public GetMenu(IGetMenuItemService getMenuItemService)
{
_getMenuItemService = getMenuItemService;
}
}
کلاس GetMenu از کلاس پایه ViewComponent ارثبری میکند.
یک فیلد خصوصی _getMenuItemService از نوع IGetMenuItemService تعریف شده است.
سازنده کلاس GetMenu فیلد _getMenuItemService را از طریق تزریق وابستگی مقداردهی اولیه میکند.
متد Invoke:
csharp
public IViewComponentResult Invoke()
{
var menuItem = _getMenuItemService.Execute();
return View(viewName: "GetMenu", menuItem.Data);
}
متد Invoke برای اجرای ViewComponent استفاده میشود.
از سرویس IGetMenuItemService برای دریافت دادههای منو استفاده میشود.
نتیجه دادههای دریافت شده به View به نام "GetMenu" ارسال میشود.
پوشه ViewComponents:
پوشه ViewComponents در پروژههای ASP.NET Core معمولاً برای نگهداری کلاسهای ViewComponent استفاده میشود. این پوشه به شما کمک میکند تا کلاسهای ViewComponent خود را سازماندهی و مدیریت کنید.
فایل View مربوط به ViewComponent:
برای ViewComponent به نام GetMenu، فایل View مربوطه باید در مسیر زیر قرار گیرد:
Views/Shared/Components/GetMenu/Default.cshtml
یا اگر ViewComponent به صورت دقیقتری تعریف شده باشد:
Views/Shared/Components/GetMenu/GetMenu.cshtml
نتیجهگیری:
کلاس GetMenu به عنوان یک ViewComponent عمل میکند که منوی سایت را با استفاده از سرویس IGetMenuItemService دریافت و نمایش میدهد. ViewComponents به شما امکان میدهند تا بخشهای قابل استفاده مجدد و قابل تکرار از UI را ایجاد کنید و آنها را در پروژههای ASP.NET Core خود به کار ببرید.