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

فروشگاه آنلاین با 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


تاریخ انتشار :۶ بهمن ۱۳۹۴



دیدگاه ها :