إنشاء الـ Entities الخاصة بالـ Customer Basket Module

لما نبدأ شغل على أي Module جديد في المشروع، أول خطوة هي تصميم الـ Entities اللي تمثل البيانات الأساسية في هذا الجزء. في حالة الـ Customer Basket، عندنا كيانين أساسيين هما:

  1. الـCustomer Basket: بتمثل سلة المشتريات الخاصة بالعميل.
  2. الـBasket Item: بتمثل كل منتج تم اختياره ووضعه في السلة.

تصميم كيان Customer Basket

الكود:

public class CustomerBasket
{
    public string Id { get; set; }
    public List<BasketItem> Items { get; set; }
}

شرح التصميم:

  • Id:
    • نوعه string لأن اللي هيعمل الـ Create للـ Customer Basket هو الـ Front-end (زي الـ Client-side JavaScript أو تطبيق موبايل).
    • مثال على الـ Id: UUID أو GUID بيتم إنشاؤه عند العميل.
  • Items:
    • List من الكيان التاني (BasketItem).
    • بتحتوي على المنتجات اللي العميل أضافها للسلة.

تصميم كيان Basket Item

الكود:

public class BasketItem
{
    public int Id { get; set; }
    public string ProductName { get; set; }
    public string PictureUrl { get; set; }
    public decimal Price { get; set; }
    public string Category { get; set; }
    public string Brand { get; set; }
    public int Quantity { get; set; }
}

شرح التصميم:

  • Id:
    • بيمثل الـ Identifier الخاص بالمنتج، وغالبًا هيبقا نفس الـ Id اللي في قاعدة البيانات.
  • ProductName:
    • اسم المنتج.
  • PictureUrl:
    • رابط صورة المنتج.
  • Price:
    • سعر الوحدة الواحدة من المنتج.
  • Category:
    • تصنيف المنتج (مثلاً: “Electronics”, “Clothing”).
  • Brand:
    • اسم العلامة التجارية.
  • Quantity:
    • عدد الوحدات المطلوبة من المنتج.

ملاحظات حول التصميم:

  1. عدم التوريث من BaseEntity:
    • السبب إننا مش بنتعامل مع Database Context هنا.
    • الـ Id هنا نوعه string عشان يتوافق مع طبيعة الـ Redis.
  2. التعامل مع Redis:
    • الـ Redis بيستخدمه بشكل أساسي للتخزين المؤقت (Cache) أو تخزين الـ Sessions.
    • مفيش حاجة زي DbSet أو Migrations هنا، لأن الـ Redis بيشتغل مع الـ Data كمجموعة Key-Value.

ليه مش عملنا Configuration للـ Customer Basket؟

  • الـ CustomerBasket و BasketItem بيتم تخزينهم في Redis، واللي طريقة عمله مختلفة تمامًا عن الـ Relational Databases زي SQL.
  • مفيش داعي لإضافة DbSet ولا إعداد Migrations لأننا مش هنضيف الـ Entities دي في الـ EF Core.