فروشگاه آنلاین با MVC بخش دهم


دوستان ، در درس قبل ، view را مطابق با فیلدهای جدید قیمت و تصویر محصول ، تغییر دادیم و این فیلدها را مقدار دهی اولیه کردیم . در این مقاله میخواهیم کلاس سبدخرید را ادامه دهیم و توابع Add و Remove را پیاده سازی خواهیم کرد …

 

ایجاد کلاس ShoppingCart :

در فولدر Services که قبلا ایجاد کردیم یک کلاس تعریف کنید بنام ShoppingCart.cs . تمام عملیات درج و حذف و ویرایش آیتمهای سبدخرید ، در این کلاس تعریف می شوند .

ابتدا دو متغیر global در سطح کلاس بصورت زیر تعریف می کنیم :

 
private readonly StoreContext _db;
private readonly string _cartId;
                                           

سپس سازنده کلاس را بصورت زیر تعریف میکنیم :

 
public ShoppingCart(HttpContextBase context) : this(context, new StoreContext()) { }
public ShoppingCart(HttpContextBase httpContext , StoreContext storeContext)
 {
      _db = storeContext;
      _cartId = GetCartId(httpContext);
 }
                                           

تابع Add :

اولین تابعی که می خواهیم به کلاس سبدخرید اضافه کنیم Add می باشد .بدنه این تابع را به شکل زیر تعریف می کنیم :

 
public void Add(int id)
{
    var product = _db.Products.SingleOrDefault(p => p.ProductId == id);
    if(product == null)
    {
        // TODO : Exception
        return;
    }
    var cartItem = _db.CartItems
        .SingleOrDefault(c => c.CartId == _cartId && c.ProductId == id );
    if(cartItem != null)
    {
        cartItem.Count ++;
    }
    else
    {
        cartItem = new Models.CartItem(){
            ProductId = id,
            CartId = _cartId,
            Count = 1 ,
            DateCreated = DateTime.Now,
        };
        _db.CartItems.Add(cartItem);
    }
    _db.SaveChanges();
}
                                          

توضیح : تابع Add ، id محصول را بعنوان پارامتر ورودی می گیرد . در شرط if اول ، بررسی می کند که اگر محصولی با این id در جدول محصولات موجود نباشد ، return میکند وگرنه به ادامه تابع می رود . در دستورات بعدی ، بررسی می شود که اگر سبد خرید از قبل ایجاد شده است ، تعداد آن محصول را یکی اضافه می کند و اگر سبد خرید جدید می باشد ، تعداد محصول را برابر عدد یک قرار می دهد و نیز productId محصول را برابر id و DateCreated را برابر زمان حال حاضر تعیین می کند . در نهایت این محصول را بعنوان یک رکورد از سبد خرید ثبت می کند و دیتابیس را آپدیت می کند .

 

تابع Remove :

تابع حذف دارای پارامتر ورودی int و خروجی int می باشد . پارامتر ورودی برای اینست که productId را می گیرد و آنرا حذف می کند . پارامتر خروجی به این دلیل بصورت عددی تعریف شده که ممکن است از محصول با id=productId چند آیتم در سبد خرید وجود داشته باشد و ما میخواهیم با فراخوانی تابع Remove ، فقط یکی از آنها را حذف کنیم . تعدادی که از آن محصول باقی می ماند را بصورت پارامتر خروجی این تابع در نظر گرفتیم .

 
public int Remove(int productId)
{
    var cartItem = _db.CartItems
        .SingleOrDefault(c => c.CartId == _cartId && c.ProductId == productId);
    var ItemCount = 0;
    if(cartItem == null)
    {
        return ItemCount;
    }
    if (cartItem.Count > 1)
    {
        cartItem.Count–;
        ItemCount = cartItem.Count;
    }
    else
    {
        _db.CartItems.Remove(cartItem);
    }
    _db.SaveChanges();
    return ItemCount;
}
                                          

توضیح : مقدار خروجی این تابع ItemCount است . ابتدا مقدار پیش فرض صفر را دارد و سپس در شرط if بررسی می شود که اگر آیتمی در سبدخرید موجود نباشد ، عدد صفر را بعنوان خروجی برمیگرداند . اگر از آن محصول خاص در سبد خرید بیشتر از یک عدد موجود باشد یکی از تعداد آن کم می کند و آنرا return می کند . و در قسمت else اگر از آن محصول یک عدد در سبد خرید موجود باشد ، آن رکورد را از جدول cartItems حذف کرده و در نهایت دیتابیس را آپدیت می کند .

در مقاله بعد ، آیتمهای افزوده شده به سبدخرید کاربر را در کوکی ذخیره می کنیم و نیز کنترولر سبدخرید را تکمیل خواهیم کرد . با ما باشید …wink



دیدگاه ها :