private static void Main(string[] args) { var order = new Order(); Console.WriteLine("good user story"); order.Place(); order.Pay(); order.Ship(); Console.WriteLine("bad user story"); order = new Order(); try { order.Pay(); } catch (ArgumentException e) { Console.WriteLine(e.Message); } try { order.Ship(); } catch (ArgumentException e) { Console.WriteLine(e.Message); } try { order.Place(); } catch (ArgumentException e) { Console.WriteLine(e.Message); } try { order.Ship(); } catch (ArgumentException e) { Console.WriteLine(e.Message); } try { order.Pay(); } catch (ArgumentException e) { Console.WriteLine(e.Message); } Console.ReadKey(); }
public void ChangeState(Order order, IOrderState newState) { order.ChangeState(newState); }
public void Ship(Order order) { throw new ArgumentException("Order must be Placed before Shipment"); }
public void Place(Order order) { ChangeState(order, new OrderPlaced()); }
public void Pay(Order order) { throw new ArgumentException("Order must be Placed before Payment"); }
public void Ship(Order order) { throw new ArgumentException("order already shipped"); }
public void Place(Order order) { throw new ArgumentException("order shipped. There no reason to place it again"); }
public void Pay(Order order) { throw new ArgumentException("order shipped, what you suppose to pay?"); }
public void Ship(Order order) { ChangeState(order, new OrderShipped()); }
public void Place(Order order) { throw new ArgumentException("Order cant be placed. It's already payed"); }