时间:2021-07-01 10:21:17 帮助过:46人阅读
弹指一挥间,从事开发工作两年多了,工作记录文件夹不知不觉好几G了。今天分享下之前项目中用到的一个购物车示例,虽然用的技术比较老(拖放控件DataGview),我觉得里面包含了很多可以细细咀嚼的 面向对象思想 ,尤其是商品和购物车各个对象的从属关系。购
弹指一挥间,从事开发工作两年多了,工作记录文件夹不知不觉好几G了。今天分享下之前项目中用到的一个购物车示例,虽然用的技术比较老(拖放控件DataGview),我觉得里面包含了很多可以细细咀嚼的面向对象思想,尤其是商品和购物车各个对象的从属关系。购物车老生常谈的东西,希望能起到抛砖引玉的效果。下面就简单介绍下吧!(via:女孩礼物网)
此款短小精悍的购物车主要有三大功能:1.折扣方案调整 2.商品列表 3.购物车
Product.cs
1 using System; 2 using System.Collections.Generic; 3 4 [Serializable] 5 public class Product { 6 7 int id; 8 9 public int Id { 10 get { return id; } 11 set { id = value; } 12 } 13 14 string name; 15 16 public string Name { 17 get { return name; } 18 set { name = value; } 19 } 20 21 decimal price; 22 23 public decimal Price { 24 get { return price; } 25 set { price = value; } 26 } 27 28 string unit; 29 30 public string Unit { 31 get { return unit; } 32 set { unit = value; } 33 } 34 35 public Product(int id, string name, decimal price, string unit) { 36 this.id = id; 37 this.name = name; 38 this.price = price; 39 this.unit = unit; 40 } 41 }
ShopCartItem.cs
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 6 [Serializable] 7 public class ShopCartItem { 8 9 private Product product; 10 private int count; 11 12 public Product Product { 13 get { return product; } 14 set { product = value; } 15 } 16 public int Count { 17 get { return count; } 18 set { count = value; } 19 } 20 21 ///22 /// 单项总折后价。 23 /// 24 public decimal Price { 25 get { 26 decimal price = (decimal)0; 27 List discountsUsing = (List )HttpContext.Current.Application["DiscountsUsing"]; 28 price = this.TotalPrice; 29 foreach (IDiscountable discount in discountsUsing) { 30 price = price * (decimal)discount.GetDiscount(this.product.Price, this.count); 31 } 32 return price; 33 } 34 } 35 36 /// 37 /// 单项总原价 38 /// 39 public decimal TotalPrice { 40 get{ 41 return this.product.Price * this.count; 42 } 43 } 44 45 public ShopCartItem(Product product, int count) { 46 this.product = product; 47 this.count = count; 48 } 49 }
ShopCartSet.cs
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 6 [Serializable] 7 public class ShopCartSet : IEnumerable{ 8 9 private Dictionary<int, ShopCartItem> items; 10 11 public ShopCartSet() { 12 this.items = new Dictionary<int, ShopCartItem>(); 13 } 14 15 /// 16 /// 各项总原价 17 /// 18 public decimal TotalPrice { 19 get { 20 decimal price = (decimal)0; 21 foreach (ShopCartItem item in this) { 22 price = price + item.TotalPrice; 23 } 24 return price; 25 } 26 } 27 28 /// 29 /// 各项总折后价 30 /// 31 public decimal Price { 32 get { 33 decimal price = (decimal)0; 34 foreach (ShopCartItem item in this) { 35 price = price + item.Price; 36 } 37 return price; 38 } 39 } 40 41 public ShopCartItem this[int id] { 42 get { 43 return this.items[id]; 44 } 45 set { 46 this.items[id] = value; 47 } 48 } 49 50 public void Add(Product product, int count) { 51 this.Add(new ShopCartItem(product, count)); 52 } 53 54 public void Add(ShopCartItem item) { 55 if (!this.items.ContainsKey(item.Product.Id)) { 56 this.items.Add(item.Product.Id, item); 57 } 58 else { 59 this.items[item.Product.Id].Count++; 60 } 61 } 62 63 public void Remove(int key) { 64 this.items.Remove(key); 65 } 66 67 public void Remove(Product product) { 68 this.items.Remove(product.Id); 69 } 70 71 public void Remove(ShopCartItem shopCartItem) { 72 this.items.Remove(shopCartItem.Product.Id); 73 } 74 75 #region 接口实现 76 public IEnumerator GetEnumerator() { 77 return this.items.Values.GetEnumerator(); 78 } 79 80 System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { 81 return this.items.Values.GetEnumerator(); 82 } 83 #endregion 84 }
源码下载