上面代码的逻辑是否与我们预期的一致,该如何验证?这里我们通过单元测试的方式来进行校验,且看我们是如何测试的吧。
[TestClass]
public class OrderTest
{
/// <summary>
/// 订单创建逻辑测试
/// </summary>
[TestMethod]
public void CreateOrderTest()
{
Address address = new Address();
address.FullName = "张三";
address.FullAddress = "广东省深圳市福田区xxx街道888号";
address.Tel = "13800138000";
List<SaleSkuInfo> saleSkuInfos = new List<SaleSkuInfo>();
saleSkuInfos.Add(new SaleSkuInfo(1138,2));
saleSkuInfos.Add(new SaleSkuInfo(1139, 3));
//商品总金额大于100分支
Order order = Order.Create("181027887609", address, saleSkuInfos.ToArray());
Assert.AreEqual(OrderStatus.PendingPayment, order.Status);
Assert.AreEqual(2, order.Lines.Count);
Assert.AreEqual(13300, order.DueAmount);
//商品总金额小于100分支
Order order1 = Order.Create("181027887610", address, new SaleSkuInfo[]{ new SaleSkuInfo(1140, 3)});
Assert.AreEqual(OrderStatus.PendingPayment, order1.Status);
Assert.AreEqual(1, order1.Lines.Count);
Assert.AreEqual(8m, order1.ShippingFee);
Assert.AreEqual(14, order1.DueAmount);
}
/// <summary>
/// 订单支付逻辑测试
/// </summary>
[TestMethod]
public void PayOrderTest()
{
Address address = new Address();
address.FullName = "张三";
address.FullAddress = "广东省深圳市福田区xxx街道888号";
address.Tel = "13800138000";
List<SaleSkuInfo> saleSkuInfos = new List<SaleSkuInfo>();
saleSkuInfos.Add(new SaleSkuInfo(1138, 2));
saleSkuInfos.Add(new SaleSkuInfo(1139, 3));
//商品总金额大于100分支
Order order = Order.Create("181027887609", address, saleSkuInfos.ToArray());
Assert.AreEqual(OrderStatus.PendingPayment, order.Status);
Assert.AreEqual(2, order.Lines.Count);
Assert.AreEqual(13300, order.DueAmount);
//部分支付分支
order.Pay(5000);
Assert.AreEqual(5000m, order.ActAmount);
Assert.AreEqual(OrderStatus.PendingPayment, order.Status);
//部分支付分支
order.Pay(1000);
Assert.AreEqual(6000m, order.ActAmount);
Assert.AreEqual(OrderStatus.PendingPayment, order.Status);
//全部支付分支
order.Pay(7300);
Assert.AreEqual(13300m, order.ActAmount);
Assert.AreEqual(OrderStatus.PendingShipment, order.Status);
}
}
本文地址:https://www.cnblogs.com/huangzelin/p/9861439.html ,转载请申明出处。
结语
到这里,不知道大家注意没有,上面的编码过程我们没有提到任何的数据库设计与存储之类的问题。我们一心都在奔着分析业务,设计模型和实现业务处理逻辑来编码,DDD的设计上有个原则叫忘掉数据库。
在我看来我们的大多数应用程序的运行过程是这样的:
接收用户输入
程序内存组装业务对象
将对象持久化到存储设备(数据库等)
当然还有另外一种是:
接收用户输入
从持久化设备读取数据(数据库等)
程序根据读取的数据内存组装业务对象
将对象返回调用端
==从上面的分析来看内存中领域对象组装过程是最核心的,因其业务千变万化,没法用代码做到通用处理。而数据的持久化相对来说没啥具体业务逻辑,代码上的通用也比较容易。所以,我们可以说DDD方式编程的项目,领域模型设计的合理就意味着这个项目已经成功大半了。==
最后,感谢各位看官听我唠叨了这么久,有问题请给我留言。谢谢
查看源码请移步到:
https://github.com/hzl091/NewSale
支付宝打赏
微信打赏