EndPoint.Site => Areas => Admin => Controllers CategoriesController.cs
بیایید کد CategoriesController را بررسی کنیم. این کنترلر برای مدیریت عملیاتهای مربوط به دستهبندیها در قسمت مدیرت (Admin) استفاده میشود.
توضیحات کد:
Namespace و Imports:
csharp
using Microsoft.AspNetCore.Mvc;
using Test_Store.Application.Interfaces.FacadPatterns;
namespace EndPoint.Site.Areas.Admin.Controllers:
نامفضا برای سازماندهی کدهای مرتبط با کنترلرهای قسمت مدیریت.
using ها
برای ایمپورت کردن کلاسها و اینترفیسهای مورد نیاز.
تعریف کنترلر:
csharp
[Area("Admin")]
public class CategoriesController : Controller
{
private readonly IProductFacad _productFacad;
public CategoriesController(IProductFacad productFacad)
{
_productFacad = productFacad;
}
}
[Area("Admin")]:
مشخص میکند که این کنترلر متعلق به ناحیه (Area) "Admin" است.
private readonly IProductFacad _productFacad;:
تعریف یک فیلد خصوصی برای فاساد محصولات.
سازنده کنترلر که وابستگی به IProductFacad را از طریق تزریق وابستگی دریافت میکند.
متد Index:
csharp
public IActionResult Index(long? parentId)
{
return View(_productFacad.GetCategoriesService.Execute(parentId).Data);
}
این متد دادههای دستهبندیها را از سرویس GetCategoriesService میگیرد و به ویو ارسال میکند.
parentId
به عنوان پارامتر ورودی برای فیلتر کردن دستهبندیها استفاده میشود.
متد AddNewCategory (HttpGet):
csharp
[HttpGet]
public IActionResult AddNewCategory(long? parentId)
{
ViewBag.parentId = parentId;
return View();
}
این متد ویو AddNewCategory را نمایش میدهد و parentId را به ViewBag اختصاص میدهد تا در ویو استفاده شود.
متد AddNewCategory (HttpPost):
csharp
[HttpPost]
public IActionResult AddNewCategory(long? ParentId, string Name)
{
var result = _productFacad.AddNewCategoryService.Execute(ParentId, Name);
return Json(result);
}
این متد دادههای ارسال شده توسط کاربر را دریافت میکند و به سرویس AddNewCategoryService ارسال میکند.
سپس نتیجه را به صورت JSON بازمیگرداند.
نتیجهگیری:
این کنترلر CategoriesController به شما امکان میدهد تا عملیاتهای مربوط به مدیریت دستهبندیها را انجام دهید. شامل متدهای Index برای نمایش لیست دستهبندیها، AddNewCategory برای نمایش فرم اضافه کردن دستهبندی جدید (با متد GET) و پردازش فرم اضافه کردن دستهبندی جدید (با متد POST) است.
Test_Store 8.zip
حجم:
53.6M
افزودن محصولات جدید و لیست محصولات با جزئیات
بیایید کد IDataBaseContext را بررسی کنیم. این اینترفیس به منظور تعریف قراردادهای مورد نیاز برای ارتباط با دیتابیس در لایهی دادهای (Data Layer) استفاده میشود.
توضیحات کد:
تعریف اینترفیس:
csharp
public interface IDataBaseContext
{
// ...
}
این کد یک اینترفیس به نام IDataBaseContext تعریف میکند که شامل قراردادهای مورد نیاز برای کار با دیتابیس است.
DbSet ویژگیها:
این بخش شامل تعریف جداول مختلف دیتابیس به صورت DbSet است که نمایشی از جداول در دیتابیس را ارائه میدهد.
DbSet<T> کلاسهایی هستند که از طرف Entity Framework برای کار با جداول دیتابیس استفاده میشوند.
csharp
DbSet<User> Users { get; set; }
DbSet<Role> Roles { get; set; }
DbSet<UserInRole> UserInRoles { get; set; }
DbSet<Category> Categories { get; set; }
DbSet<Product> Products { get; set; }
DbSet<ProductImages> ProductImages { get; set; }
DbSet<ProductFeatures> ProductFeatures { get; set; }
هر یک از این DbSet ها به ترتیب برای کار با جداول User, Role, UserInRole, Category, Product, ProductImages, و ProductFeatures استفاده میشوند.
متدهای SaveChanges:
این بخش شامل تعریف متدهای مختلف برای ذخیره تغییرات در دیتابیس است.
csharp
int SaveChanges(bool acceptAllChangesOnSuccess);
int SaveChanges();
Task<int> SaveChangesAsync(bool acceptAllChangesOnSuccess, CancellationToken cancellationToken = new CancellationToken());
Task<int> SaveChangesAsync(CancellationToken cancellationToken = new CancellationToken());
int SaveChanges(bool acceptAllChangesOnSuccess):
این متد تغییرات را در دیتابیس ذخیره میکند و پارامتر acceptAllChangesOnSuccess
تعیین میکند که آیا همه تغییرات در صورت موفقیت ذخیره شوند یا خیر.
int SaveChanges():
این متد تغییرات را در دیتابیس ذخیره میکند.
Task<int> SaveChangesAsync(bool acceptAllChangesOnSuccess, CancellationToken cancellationToken = new CancellationToken()):
این متد به صورت غیر همزمان (asynchronous) تغییرات را در دیتابیس ذخیره میکند.
Task<int> SaveChangesAsync(CancellationToken cancellationToken = new CancellationToken()):
این متد به صورت غیر همزمان تغییرات را در دیتابیس ذخیره میکند.
نتیجهگیری:
این اینترفیس IDataBaseContext به شما امکان میدهد تا جداول مختلف دیتابیس را تعریف کنید و متدهای مختلف برای ذخیره تغییرات در دیتابیس را ارائه میدهد. این طراحی کمک میکند تا ارتباط با دیتابیس به صورت انعطافپذیر و قابل تست باشد.
بیایید کد اینترفیس IProductFacad را بررسی کنیم. این اینترفیس به منظور تعریف قراردادهای مورد نیاز برای فاساد محصولات استفاده میشود. فاساد (Facade) یک الگوی طراحی است که یک رابط ساده و یکپارچه برای سیستمهای پیچیده ارائه میدهد.
توضیحات کد:
تعریف اینترفیس:
csharp
public interface IProductFacad
{
// ...
}
این کد یک اینترفیس به نام IProductFacad تعریف میکند که شامل قراردادهای مورد نیاز برای مدیریت محصولات است.
ویژگیها (Properties):
این بخش شامل تعریف ویژگیهای مختلف برای عملیاتهای مرتبط با محصولات است.
csharp
AddNewCategoryService AddNewCategoryService { get; }
IGetCategoriesService GetCategoriesService { get; }
AddNewProductService AddNewProductService { get; }
IGetAllCategoriesService GetAllCategoriesService { get; }
IGetProductForAdminService GetProductForAdminService { get; }
IGetProductDetailForAdminService GetProductDetailForAdminService { get; }
AddNewCategoryService:
این ویژگی یک شیء از نوع AddNewCategoryService را بازمیگرداند که برای اضافه کردن دستهبندی جدید استفاده میشود.
IGetCategoriesService:
این ویژگی یک شیء از نوع IGetCategoriesService را بازمیگرداند که برای دریافت دستهبندیها استفاده میشود.
AddNewProductService:
این ویژگی یک شیء از نوع AddNewProductService را بازمیگرداند که برای اضافه کردن محصول جدید استفاده میشود.
IGetAllCategoriesService:
این ویژگی یک شیء از نوع IGetAllCategoriesService را بازمیگرداند که برای دریافت همه دستهبندیها استفاده میشود.
IGetProductForAdminService:
این ویژگی یک شیء از نوع IGetProductForAdminService را بازمیگرداند که برای دریافت اطلاعات محصولات برای مدیران استفاده میشود.
IGetProductDetailForAdminService:
این ویژگی یک شیء از نوع IGetProductDetailForAdminService
را بازمیگرداند که برای دریافت جزئیات محصولات برای مدیران استفاده میشود.
نتیجهگیری:
این اینترفیس IProductFacad به شما امکان میدهد تا قراردادهای مختلف برای مدیریت محصولات را تعریف کنید. با استفاده از اینترفیس فاساد، میتوانید به صورت یکپارچه و ساده به عملیاتهای پیچیدهای مانند اضافه کردن دستهبندی و محصول، دریافت دستهبندیها و محصولات دسترسی داشته باشید.
بیایید کد کلاس ProductFacad را بررسی کنیم. این کلاس یک پیادهسازی از اینترفیس IProductFacad است و برای مدیریت عملیاتهای مختلف مرتبط با محصولات استفاده میشود.
توضیحات کد:
تعریف کلاس:
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 پیادهسازی میکند.
دو فیلد خصوصی IDataBaseContext و IHostingEnvironment برای کار با دیتابیس و محیط میزبانی تعریف شدهاند.
سازنده کلاس این دو وابستگی را از طریق تزریق وابستگی دریافت میکند.
ویژگیها (Properties):
این بخش شامل تعریف ویژگیهای مختلف برای سرویسهای مرتبط با محصولات است.
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 را بازمیگرداند. اگر نمونه قبلاً ایجاد نشده باشد، آن را ایجاد میکند.
نتیجهگیری:
این کلاس ProductFacad به عنوان یک فاساد برای مدیریت عملیاتهای مختلف مرتبط با محصولات عمل میکند. با استفاده از ویژگیهای مختلف، این کلاس سرویسهای مختلف مانند اضافه کردن دستهبندی، دریافت دستهبندیها، اضافه کردن محصول و دریافت اطلاعات محصولات را ارائه میدهد. این طراحی کمک میکند تا عملیاتهای پیچیده به صورت سادهتر و یکپارچهتر مدیریت شوند.
بیایید این کد را که برای دریافت جزئیات محصول برای مدیران (ادمینها) استفاده میشود بررسی کنیم. این کد شامل تعریف اینترفیس IGetProductDetailForAdminService و پیادهسازی آن در کلاس GetProductDetailForAdminService است.
توضیحات کد:
تعریف اینترفیس:
csharp
public interface IGetProductDetailForAdminService
{
ResultDto<ProductDetailForAdmindto> Execute(long Id);
}
این اینترفیس یک متد Execute تعریف میکند که یک long به عنوان ورودی میگیرد و یک ResultDto<ProductDetailForAdmindto> را بازمیگرداند.
کلاس GetProductDetailForAdminService:
فیلدهای خصوصی و سازنده:
csharp
public class GetProductDetailForAdminService : IGetProductDetailForAdminService
{
private readonly IDataBaseContext _context;
public GetProductDetailForAdminService(IDataBaseContext context)
{
_context = context;
}
}
این کلاس شامل یک فیلد خصوصی _context از نوع IDataBaseContext و یک سازنده است که این فیلد را مقداردهی اولیه میکند.
متد Execute:
csharp
public ResultDto<ProductDetailForAdmindto> Execute(long Id)
{
var product = _context.Products
.Include(p => p.Category)
.ThenInclude(p => p.ParentCategory)
.Include(p => p.ProductFeatures)
.Include(p => p.ProductImages)
.Where(p => p.Id == Id)
.FirstOrDefault();
return new ResultDto<ProductDetailForAdmindto>()
{
Data = new ProductDetailForAdmindto()
{
Brand = product.Brand,
Category = GetCategory(product.Category),
Description = product.Description,
Displayed = product.Displayed,
Id = product.Id,
Inventory = product.Inventory,
Name = product.Name,
Price = product.Price,
Features = product.ProductFeatures.Select(p => new ProductDetailFeatureDto
{
Id = p.Id,
DisplayName = p.DisplayName,
Value = p.Value
}).ToList(),
Images = product.ProductImages.Select(p => new ProductDetailImagesDto
{
Id = p.Id,
Src = p.Src,
}).ToList(),
},
IsSuccess = true,
Message = "",
};
}
این متد اطلاعات محصول را با استفاده از شناسه محصول Id از دیتابیس دریافت میکند.
از Include و ThenInclude برای بارگذاری اطلاعات مرتبط استفاده میشود (مثلاً دستهبندیها، ویژگیهای محصول، تصاویر محصول).
نتیجه به عنوان یک ResultDto<ProductDetailForAdmindto> بازگردانده میشود که شامل جزئیات محصول است.
متد کمکی GetCategory:
csharp
private string GetCategory(Category category)
{
string result = category.ParentCategory != null ? $"{category.ParentCategory.Name} - " : "";
return result += category.Name;
}
این متد برای دریافت نام دستهبندی و والد آن (در صورت وجود) استفاده میشود.
کلاسهای دادهای:
ProductDetailForAdmindto:
csharp
public class ProductDetailForAdmindto
{
public long Id { get; set; }
public string Name { get; set; }
public string Category { get; set; }
public string Brand { get; set; }
public string Description { get; set; }
public int Price { get; set; }
public int Inventory { get; set; }
public bool Displayed { get; set; }
public List<ProductDetailFeatureDto> Features { get; set; }
public List<ProductDetailImagesDto> Images { get; set; }
}
این کلاس شامل جزئیات محصول مانند شناسه، نام، دستهبندی، برند، توضیحات، قیمت، موجودی، ویژگیها و تصاویر محصول است.
ProductDetailImagesDto:
csharp
public class ProductDetailImagesDto
{
public long Id { get; set; }
public string Src { get; set; }
}
این کلاس شامل اطلاعات تصاویر محصول است.
ProductDetailFeatureDto:
csharp
public class ProductDetailFeatureDto
{
public long Id { get; set; }
public string DisplayName { get; set; }
public string Value { get; set; }
}
این کلاس شامل اطلاعات ویژگیهای محصول است.
نتیجهگیری:
این کد به شما امکان میدهد تا جزئیات کامل یک محصول را با استفاده از شناسه آن دریافت کنید. از اینترفیس IGetProductDetailForAdminService برای تعریف قرارداد و از کلاس GetProductDetailForAdminService برای پیادهسازی این قرارداد استفاده میشود. جزئیات محصول شامل ویژگیها، تصاویر، دستهبندی، و سایر اطلاعات مرتبط است که به مدیران کمک میکند تا اطلاعات کامل و دقیقی از محصولات داشته باشند.
بیایید کد سرویس GetProductForAdminService و اینترفیس IGetProductForAdminService را که برای دریافت محصولات برای مدیران استفاده میشود بررسی کنیم.
توضیحات کد:
تعریف اینترفیس:
csharp
public interface IGetProductForAdminService
{
ResultDto<ProductForAdminDto> Execute(int Page = 1, int PageSize = 20);
}
این اینترفیس یک متد Execute تعریف میکند که دو پارامتر Page و PageSize دریافت میکند و یک ResultDto<ProductForAdminDto> را بازمیگرداند.
پارامتر Page نشاندهنده شماره صفحه و PageSize نشاندهنده تعداد آیتمها در هر صفحه است.
کلاس GetProductForAdminService:
فیلدهای خصوصی و سازنده:
csharp
public class GetProductForAdminService : IGetProductForAdminService
{
private readonly IDataBaseContext _context;
public GetProductForAdminService(IDataBaseContext context)
{
_context = context;
}
}
این کلاس شامل یک فیلد خصوصی _context از نوع IDataBaseContext و یک سازنده است که این فیلد را مقداردهی اولیه میکند.
متد Execute:
csharp
public ResultDto<ProductForAdminDto> Execute(int Page = 1, int PageSize = 20)
{
int rowCount = 0;
var products = _context.Products
.Include(p => p.Category)
.ToPaged(Page, PageSize, out rowCount)
.Select(p => new ProductsFormAdminList_Dto
{
Id = p.Id,
Brand = p.Brand,
Category = p.Category.Name,
Description = p.Description,
Displayed = p.Displayed,
Inventory = p.Inventory,
Name = p.Name,
Price = p.Price,
}).ToList();
return new ResultDto<ProductForAdminDto>()
{
Data = new ProductForAdminDto()
{
Products = products,
CurrentPage = Page,
PageSize = PageSize,
RowCount = rowCount
},
IsSuccess = true,
Message = "",
};
}
این متد اطلاعات محصولات را از دیتابیس دریافت میکند و سپس آنها را به صورت صفحهبندی شده (paging) بازمیگرداند.
از Include برای بارگذاری اطلاعات مرتبط (دستهبندی) استفاده میشود.
متد ToPaged برای انجام عملیات صفحهبندی استفاده میشود و rowCount تعداد کل رکوردها را محاسبه میکند.
نتیجه به عنوان یک ResultDto<ProductForAdminDto> شامل محصولات صفحهبندی شده، شماره صفحه جاری، اندازه صفحه و تعداد کل رکوردها بازگردانده میشود.
کلاسهای دادهای:
ProductForAdminDto:
csharp
public class ProductForAdminDto
{
public int RowCount { get; set; }
public int CurrentPage { get; set; }
public int PageSize { get; set; }
public List<ProductsFormAdminList_Dto> Products { get; set; }
}
این کلاس شامل جزئیات مربوط به صفحهبندی مانند تعداد کل رکوردها، شماره صفحه جاری، اندازه صفحه و لیست محصولات است.
ProductsFormAdminList_Dto:
csharp
public class ProductsFormAdminList_Dto
{
public long Id { get; set; }
public string Name { get; set; }
public string Category { get; set; }
public string Brand { get; set; }
public string Description { get; set; }
public int Price { get; set; }
public int Inventory { get; set; }
public bool Displayed { get; set; }
}
این کلاس شامل اطلاعات محصول مانند شناسه، نام، دستهبندی، برند، توضیحات، قیمت، موجودی و وضعیت نمایش است.
نتیجهگیری:
این کد به شما امکان میدهد تا لیست محصولات را به صورت صفحهبندی شده برای مدیران دریافت کنید. از اینترفیس IGetProductForAdminService برای تعریف قرارداد و از کلاس GetProductForAdminService برای پیادهسازی این قرارداد استفاده میشود. اطلاعات محصولات شامل جزئیات صفحهبندی و محصولات بازگردانده شده است که به مدیران کمک میکند تا به راحتی محصولات را مدیریت کنند.
بیایید کد کلاس Category را بررسی کنیم. این کلاس نمایانگر یک دستهبندی در سیستم است و از کلاس پایه BaseEntity ارثبری میکند.
توضیحات کد:
تعریف کلاس:
csharp
public class Category : BaseEntity
{
// ...
}
این کد یک کلاس به نام Category تعریف میکند که از کلاس پایه BaseEntity ارثبری میکند.
کلاس BaseEntity معمولاً شامل ویژگیهای عمومی مانند Id, CreatedDate, ModifiedDate و غیره است.
ویژگیها (Properties):
Name:
csharp
public string Name { get; set; }
این ویژگی نام دستهبندی را نگه میدارد.
ParentCategory و ParentCategoryId:
csharp
public virtual Category ParentCategory { get; set; }
public long? ParentCategoryId { get; set; }
ParentCategory: این ویژگی یک دستهبندی والد (پدر) را نگه میدارد.
ParentCategoryId: این ویژگی شناسه دستهبندی والد را نگه میدارد.
استفاده از virtual به دلیل استفاده از قابلیت Lazy Loading در Entity Framework است.
SubCategories:
csharp
public virtual ICollection<Category> SubCategories { get; set; }
این ویژگی یک مجموعه از دستهبندیهای فرزند (زیر دستهها) را نگه میدارد.
ICollection<Category>
برای نگهداری و مدیریت لیستی از دستهبندیهای فرزند استفاده میشود.
این ویژگی از نوع virtual است که به Entity Framework اجازه میدهد تا روابط Lazy Load را پیادهسازی کند.
نتیجهگیری:
این کلاس Category به شما امکان میدهد تا دستهبندیها را در سیستم مدیریت کنید. شامل نام دستهبندی، دستهبندی والد (پدر) و زیر دستهها است. این ساختار به شما اجازه میدهد تا دستهبندیها را به صورت سلسلهمراتبی (درختی) سازماندهی کنید. از ویژگیهای virtual برای استفاده از قابلیت Lazy Loading در Entity Framework استفاده شده است.
بیایید کد کلاس Product را که نمایانگر یک محصول در سیستم است بررسی کنیم. این کلاس از کلاس پایه BaseEntity ارثبری میکند.
توضیحات کد:
تعریف کلاس:
csharp
public class Product : BaseEntity
{
// ...
}
این کد یک کلاس به نام Product تعریف میکند که از کلاس پایه BaseEntity ارثبری میکند.
کلاس BaseEntity معمولاً شامل ویژگیهای عمومی مانند Id, CreatedDate, ModifiedDate و غیره است.
ویژگیها (Properties):
Name:
csharp
public string Name { get; set; }
این ویژگی نام محصول را نگه میدارد.
Brand:
csharp
public string Brand { get; set; }
این ویژگی برند محصول را نگه میدارد.
Description:
csharp
public string Description { get; set; }
این ویژگی توضیحات محصول را نگه میدارد.
Price:
csharp
public int Price { get; set; }
این ویژگی قیمت محصول را نگه میدارد.
Inventory:
csharp
public int Inventory { get; set; }
این ویژگی موجودی (تعداد موجود) محصول را نگه میدارد.
Displayed:
csharp
public bool Displayed { get; set; }
این ویژگی نشان میدهد که آیا محصول در سایت نمایش داده میشود یا خیر.
روابط (Relationships):
Category و CategoryId:
csharp
public virtual Category Category { get; set; }
public long CategoryId { get; set; }
Category:
این ویژگی نمایانگر دستهبندی محصول است و به صورت virtual تعریف شده تا Entity Framework بتواند از قابلیت Lazy Loading استفاده کند.
CategoryId:
این ویژگی شناسه دستهبندی محصول را نگه میدارد.
ProductImages:
csharp
public virtual ICollection<ProductImages> ProductImages { get; set; }
این ویژگی یک مجموعه از تصاویر محصول را نگه میدارد. استفاده از ICollection<ProductImages> برای مدیریت لیستی از تصاویر محصول.
این ویژگی از نوع virtual است که به Entity Framework اجازه میدهد تا روابط Lazy Load را پیادهسازی کند.
ProductFeatures:
csharp
public virtual ICollection<ProductFeatures> ProductFeatures { get; set; }
این ویژگی یک مجموعه از ویژگیهای محصول را نگه میدارد. استفاده از ICollection<ProductFeatures> برای مدیریت لیستی از ویژگیهای محصول.
این ویژگی از نوع virtual است که به Entity Framework اجازه میدهد تا روابط Lazy Load را پیادهسازی کند.
نتیجهگیری:
کلاس Product به شما امکان میدهد تا محصولات را در سیستم مدیریت کنید. شامل ویژگیهایی مانند نام، برند، توضیحات، قیمت، موجودی و وضعیت نمایش است. همچنین روابط با دستهبندی، تصاویر محصول و ویژگیهای محصول را مدیریت میکند. این ساختار کمک میکند تا اطلاعات محصول به صورت کامل و سازمانیافته ذخیره و بازیابی شوند.
بیایید کد کلاس ProductFeatures را بررسی کنیم. این کلاس برای نگهداری ویژگیهای محصولات استفاده میشود و از کلاس پایه BaseEntity ارثبری میکند.
توضیحات کد:
تعریف کلاس:
csharp
public class ProductFeatures : BaseEntity
{
// ...
}
این کد یک کلاس به نام ProductFeatures تعریف میکند که از کلاس پایه BaseEntity ارثبری میکند.
کلاس BaseEntity معمولاً شامل ویژگیهای عمومی مانند Id, CreatedDate, ModifiedDate و غیره است.
ویژگیها (Properties):
Product و ProductId:
csharp
public virtual Product Product { get; set; }
public long ProductId { get; set; }
Product:
این ویژگی یک شیء از نوع Product را نگه میدارد که نمایانگر محصولی است که این ویژگی به آن تعلق دارد. استفاده از virtual به دلیل استفاده از قابلیت Lazy Loading در Entity Framework است.
ProductId:
این ویژگی شناسه محصولی را نگه میدارد که این ویژگی به آن تعلق دارد.
DisplayName:
csharp
public string DisplayName { get; set; }
این ویژگی نام نمایشی ویژگی محصول را نگه میدارد. برای مثال، اگر ویژگی "رنگ" باشد، مقدار DisplayName ممکن است "Color" باشد.
Value:
csharp
public string Value { get; set; }
این ویژگی مقدار ویژگی محصول را نگه میدارد. برای مثال، اگر ویژگی "رنگ" باشد، مقدار Value ممکن است "قرمز" باشد.
نتیجهگیری:
کلاس ProductFeatures به شما امکان میدهد تا ویژگیهای محصولات را مدیریت کنید. این شامل نام نمایشی ویژگی و مقدار آن میشود. همچنین، این کلاس روابطی با کلاس Product دارد که نمایانگر محصولی است که این ویژگی به آن تعلق دارد. با این ساختار، میتوانید اطلاعات ویژگیهای محصول را به صورت سازمانیافته و کاملاً مرتبط با محصولات خود ذخیره و مدیریت کنید.
بیایید کد کلاس ProductImages را بررسی کنیم. این کلاس برای نگهداری تصاویر محصولات استفاده میشود و از کلاس پایه BaseEntity ارثبری میکند.
توضیحات کد:
تعریف کلاس:
csharp
public class ProductImages : BaseEntity
{
// ...
}
این کد یک کلاس به نام ProductImages تعریف میکند که از کلاس پایه BaseEntity ارثبری میکند.
کلاس BaseEntity معمولاً شامل ویژگیهای عمومی مانند Id, CreatedDate, ModifiedDate و غیره است.
ویژگیها (Properties):
Product و ProductId:
csharp
public virtual Product Product { get; set; }
public long ProductId { get; set; }
Product:
این ویژگی یک شیء از نوع Product را نگه میدارد که نمایانگر محصولی است که این تصویر به آن تعلق دارد. استفاده از virtual به دلیل استفاده از قابلیت Lazy Loading در Entity Framework است.
ProductId:
این ویژگی شناسه محصولی را نگه میدارد که این تصویر به آن تعلق دارد.
Src:
csharp
public string Src { get; set; }
این ویژگی مسیر یا لینک تصویر محصول را نگه میدارد. برای مثال، میتواند مسیری به یک فایل تصویر در سرور یا یک لینک به تصویر در اینترنت باشد.
نتیجهگیری:
کلاس ProductImages به شما امکان میدهد تا تصاویر مرتبط با محصولات را مدیریت کنید. این شامل مسیر یا لینک تصویر و شناسه محصول مربوطه است. همچنین، این کلاس روابطی با کلاس Product دارد که نمایانگر محصولی است که این تصویر به آن تعلق دارد. با این ساختار، میتوانید اطلاعات تصاویر محصولات را به صورت سازمانیافته و کاملاً مرتبط با محصولات خود ذخیره و مدیریت کنید.