前一篇文章主要講了訂單上下文的POCO模型,其中訂單與訂單項中有大量的值對象。這篇文章主要講講這些值對象以及訂單項、訂單相關的領域邏輯。微信
ProductSKUs值對象用於訂單項實體中,它的信息應該來源於產品上下文的ProductSKU實體。ui
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;
}
}
複製代碼
OrderItemTotalPV值對象的領域邏輯主要是經過訂單項購買的ProductSKU的PV與數量計算出這個訂單項的總PV值。this
public partial class OrderItemTotalPV
{
public OrderItemTotalPV() { }
public OrderItemTotalPV CreateOrderItemTotalPV(ProductSKU productsku,int count)
{
this.SubTotalPV = productsku.PV * count;
return this;
}
}
複製代碼
OrderItemTotalPrice值對象的領域邏輯主要是經過訂單項購買的ProductSKU的單價與數量計算出這個訂單項的總價。spa
public partial class OrderItemTotalPrice
{
public OrderItemTotalPrice() { }
public OrderItemTotalPrice CreateOrderItemTotalPrice(ProductSKU productsku,int count)
{
this.SubTotalPrice = productsku.DealerPrice * count;
return this;
}
}
複製代碼
OrderItem實體的領域邏輯主要包含兩個方面,一個是OrderItem的Code生成規則,二是調用自身包含的上述三個值對象領域邏輯,生成相關的值對象。3d
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;
}
}
複製代碼
OrderStreet值對象的信息主要由產品購買時,肯定的聯繫人信息將相關的屬性賦值給OrderStreet值對象。code
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;
}
}
複製代碼
OrderTotalPV值對象的值由每一個訂單項的OrderItemTotalPV值對象累加起來。cdn
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;
}
}
複製代碼
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;
}
}
複製代碼
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;
}
複製代碼
DDD實戰進階視頻請關注微信公衆號:MSSHCJ產品