前一篇文章主要講了訂單上下文的POCO模型,其中訂單與訂單項中有大量的值對象。這篇文章主要講講這些值對象以及訂單項、訂單相關的領域邏輯。
1.ProductSKUs值對象領域邏輯:
ProductSKUs值對象用於訂單項實體中,它的信息應該來源於產品上下文的ProductSKU實體。
public partial class ProductSKUs { public ProductSKUs() { } public ProductSKUs CreateProductSKUs(ProductSKU productsku) { this.ProductSPUName = productsku.ProductSPUName; this.ProductPrice = productsku.DealerPrice; this.ProductPV = productsku.PV; this.ProductSKUId = productsku.Id; return this; } }
2.OrderItemTotalPV值對象領域邏輯:
OrderItemTotalPV值對象的領域邏輯主要是通過訂單項購買的ProductSKU的PV與數量計算出這個訂單項的總PV值。
public partial class OrderItemTotalPV { public OrderItemTotalPV() { } public OrderItemTotalPV CreateOrderItemTotalPV(ProductSKU productsku,int count) { this.SubTotalPV = productsku.PV * count; return this; } }
3.OrderItemTotalPrice值對象領域邏輯:
OrderItemTotalPrice值對象的領域邏輯主要是通過訂單項購買的ProductSKU的單價與數量計算出這個訂單項的總價。
public partial class OrderItemTotalPrice { public OrderItemTotalPrice() { } public OrderItemTotalPrice CreateOrderItemTotalPrice(ProductSKU productsku,int count) { this.SubTotalPrice = productsku.DealerPrice * count; return this; } }
4.OrderItem實體的領域邏輯:
OrderItem實體的領域邏輯主要包含兩個方面,一個是OrderItem的Code生成規則,二是調用自身包含的上述三個值對象領域邏輯,生成相關的值對象。
public partial class OrderItem { public OrderItem() { } public OrderItem CreateOrderItem(ProductSKU productsku,int count) { this.Id = Guid.NewGuid(); this.Code = "OrderItem " + DateTime.Now.ToString(); this.Count = count; this.OrderItemTotalPrice = new OrderItemTotalPrice().CreateOrderItemTotalPrice(productsku, count); this.OrderItemTotalPV = new OrderItemTotalPV().CreateOrderItemTotalPV(productsku, count); this.ProductSKUs = new ProductSKUs().CreateProductSKUs(productsku); return this; } }
5.OrderStreet值對象領域邏輯:
OrderStreet值對象的信息主要由產品購買時,確定的聯系人信息將相關的屬性賦值給OrderStreet值對象。
public partial class OrderStreet { public OrderStreet() { } public OrderStreet CreateOrderStreet(Contact contact) { this.Privince = contact.Province; this.City = contact.City; this.Zero = contact.Zero; this.Street = contact.Street; return this; } }
6.OrderTotalPV值對象領域邏輯:
OrderTotalPV值對象的值由每個訂單項的OrderItemTotalPV值對象累加起來。
public partial class OrderTotalPV { public OrderTotalPV() { } public OrderTotalPV CreateOrderTotalPV(List<OrderItemTotalPV> itemtotalpvs) { var ordertotalpv = 0.00M; itemtotalpvs.ForEach(p => { ordertotalpv += p.SubTotalPV; }); this.TotalPV = ordertotalpv; return this; } }
7.OrderTotalPrice值對象領域邏輯:
OrderTotalPrice值對象的值由每個訂單項的OrderItemTotalPrice值對象累加起來。
public partial class OrderTotalPrice { public OrderTotalPrice() { } public OrderTotalPrice CreateOrderTotalPrice(List<OrderItemTotalPrice> itemtotalprices) { var ordertotalprice = 0.00M; itemtotalprices.ForEach(p => { ordertotalprice += p.SubTotalPrice; }); this.TotalPrice = ordertotalprice; return this; } }
8.Orders聚合根領域邏輯:
Orders聚合根其實就是協調OrderItem實體、自身包含的3個值對象完成整個下單的領域邏輯。
public Orders CreateOrders(Guid id,Guid dealerid,List<ProductSKU> productskus, List<int> counts,Contact contact) { this.Id = id; this.OrderDealerId = dealerid; this.OrderDateTime = DateTime.Now; this.Telephone = contact.ContactTel; this.Code = "Order " + DateTime.Now.ToString(); this.OrderStreet = new OrderStreet().CreateOrderStreet(contact); this.OrderItems = new List<OrderItem>(); var orderitemtotalprices = new List<OrderItemTotalPrice>(); var orderitemtotalpvs = new List<OrderItemTotalPV>(); for(int i = 0; i < productskus.Count; i++) { var orderitem = new OrderItem().CreateOrderItem(productskus[i], counts[i]); this.OrderItems.Add(orderitem); orderitemtotalprices.Add(orderitem.OrderItemTotalPrice); orderitemtotalpvs.Add(orderitem.OrderItemTotalPV); } this.OrderTotalPrice = new OrderTotalPrice().CreateOrderTotalPrice(orderitemtotalprices); this.OrderTotalPV = new OrderTotalPV().CreateOrderTotalPV(orderitemtotalpvs); return this; }
QQ討論群:309287205
DDD實戰進階視頻請關注微信公眾號: