1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Threading.Tasks;
6
7 namespace Happy.Example.Domain.TestOrders
8 {
9 public partial class TestOrder
10 {
11 private sealed class UnCommitted : TestOrderState
12 {
13 internal static readonly string UnCommittedStatus = "未提交";
14
15 public override void AddTestOrderDetail(TestOrderDetail testOrderDetail)
16 {
17 this.TestOrder.DoAddTestOrderDetail(testOrderDetail);
18 }
19
20 public override void UpdateTestOrderDetail(Guid testOrderDetailId,decimal subtotal)
21 {
22 this.TestOrder.DoUpdateTestOrderDetail(testOrderDetailId,subtotal);
23 }
24
25 public override void RemoveTestOrderDetail(Guid testOrderDetailId)
26 {
27 this.TestOrder.DoRemoveTestOrderDetail(testOrderDetailId);
28 }
29
30 public override void Commit()
31 {
32 this.TestOrder.DoCommit();
33 }
34
35 public override string Status
36 {
37 get { return UnCommittedStatus; }
38 }
39 }
40 }
41 }
@H_
403_174@
@H_
502_3@采用封装集合手法处理Total的同步问题。
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Threading.Tasks;
6
7 using Happy.Domain;
8 using Happy.Domain.Tree;
9 using Happy.Infrastructure.ExtentionMethods;
10 using Happy.Example.Events.TestOrders;
11
12 namespace Happy.Example.Domain.TestOrders
13 {
14 public partial class TestOrder : AggregateRoot<Guid>
15 {
16 private ITestOrderState _orderState;
17
18 protected TestOrder() { }
19
20 public TestOrder(string orderCode,string customer)
21 {
22 orderCode.MustNotNullAndNotWhiteSpace("orderCode");
23 customer.MustNotNullAndNotWhiteSpace("customer");
24
25 this.Id = Guid.NewGuid();
26 this.OrderCode = orderCode;
27 this.Customer = customer;
28 this.OrderState = TestOrderStateFactory.CreateUnCommittedTestOrderState(this);
29 this.TestOrderDetails = new List<TestOrderDetail>();
30 }
31
32 public virtual System.String OrderCode { get; protected set; }
33 public virtual System.String Customer { get; protected set; }
34 public virtual System.Decimal Total { get; protected set; }
35 public virtual System.String Status { get; protected set; }
36 public virtual ICollection<TestOrderDetail> TestOrderDetails { get; protected set; }
37
38 private ITestOrderState OrderState
39 {
40 get
41 {
42 if (_orderState == null)
43 {
44 _orderState = TestOrderStateFactory.Create(this,this.Status);
45 }
46
47 return _orderState;
48 }
49 set
50 {
51 _orderState = value;
52 this.Status = value.Status;
53 }
54 }
55
56 public void AddTestOrderDetail(TestOrderDetail testOrderDetail)
57 {
58 this.OrderState.AddTestOrderDetail(testOrderDetail);
59 }
60
61 public void UpdateTestOrderDetail(Guid testOrderDetailId,decimal subtotal)
62 {
63 this.OrderState.UpdateTestOrderDetail(testOrderDetailId,subtotal);
64 }
65
66 public void RemoveTestOrderDetail(Guid testOrderDetailId)
67 {
68 this.OrderState.RemoveTestOrderDetail(testOrderDetailId);
69 }
70
71 public void Commit()
72 {
73 this.OrderState.Commit();
74 }
75
76 public void Verify()
77 {
78 this.OrderState.Verify();
79 }
80
81 private void DoAddTestOrderDetail(TestOrderDetail testOrderDetail)
82 {
83 this.TestOrderDetails.Add(testOrderDetail);
84
85 this.Total += testOrderDetail.Subtotal;
86 }
87
88 private void DoUpdateTestOrderDetail(Guid testOrderDetailId,decimal subtotal)
89 {
90 var testOrderDetail = this.TestOrderDetails.First(x => x.Id == testOrderDetailId);
91
92 this.Total -= testOrderDetail.Subtotal;
93 testOrderDetail.Subtotal = subtotal;
94 this.Total += testOrderDetail.Subtotal;
95 }
96
97 private void DoRemoveTestOrderDetail(Guid testOrderDetailId)
98 {
99 var testOrderDetail = this.TestOrderDetails.First(x => x.Id == testOrderDetailId);
100
101 this.TestOrderDetails.Remove(testOrderDetail);
102 this.Total -= testOrderDetail.Subtotal;
103 }
104
105 private void DoCommit()
106 {
107 this.OrderState = TestOrderStateFactory.CreatePendingVerificationTestOrderState(this);
108 }
109
110 private void DoVerify()
111 {
112 this.OrderState = TestOrderStateFactory.CreateVerifiedTestOrderState(this);
113
114 this.PublishEvent(new TestOrderVerified());
115 }
116 }
117 }
@H_
403_174@
背景
@H_
502_3@写这个简单的Demo过程,遇到了很多小的决策,这篇
文章就看做一个开头吧,后边重点介绍每个决策点,在一篇
文章中真的很难说完,喜欢看
代码的朋友,先去
https://happy.codeplex.com/下载。
@H_
403_174@