示例#1
0
 public OrderShouldBePaidBeforeShip(OrderState order)
 {
     Order = order;
 }
 public static OrderState.Result AddOrderItem(OrderState state, OrderItemId itemId, ProductId productId,
                                              decimal unitPrice, decimal discount) =>
 state.ApplyEvent(new OrderItemAddedEvent(itemId, state.Id, productId, unitPrice, discount));
 public static OrderState.Result CancelOrder(OrderState state) =>
 state.ApplyEvent(new OrderCancelledEvent(state.Id));
 public static OrderState.Result PayOrder(OrderState state) =>
 state.ApplyEvent(new OrderPaidEvent(state.Id));
 public static OrderState.Result ShipOrder(OrderState state) =>
 state.ThrowsIf(s => s.OrderStatus != OrderStatus.Paid, new OrderNotPaidYetException(state.Id))
 .Then(s => s.ApplyEvent(new OrderShippedEvent(state.Id)));
 public static OrderState.Result ShipOrder(OrderState state, IOrderPolicy policy) =>
 state.With(s => policy.Apply(new OrderShouldBePaidBeforeShip(s)))
 .AndThen(s => s.ApplyEvent(new OrderShippedEvent(s.Id)));