이번에는 FSM을 이용하여 주문 처리 시스템을 모델링해 보겠습니다. 이 예는 주문 처리를 위한 FSM을 보여주며 깔끔하고 명확한 구현을 보여줍니다.
Codes
Language: C#
Order.cs
public enum OrderState { New, Processing, Shipped, Delivered, Canceled }
public class Order
{
public int OrderId { get; set; }
public OrderState State { get; private set; }
public Order()
{
State = OrderState.New;
}
public void ProcessOrder()
{
if (State == OrderState.New)
{
Console.WriteLine("Processing order...");
State = OrderState.Processing;
}
else
{
Console.WriteLine("Order cannot be processed in the current state.");
}
}
public void ShipOrder()
{
if (State == OrderState.Processing)
{
Console.WriteLine("Shipping order...");
State = OrderState.Shipped;
}
else
{
Console.WriteLine("Order cannot be shipped in the current state.");
}
}
public void DeliverOrder()
{
if (State == OrderState.Shipped)
{
Console.WriteLine("Delivering order...");
State = OrderState.Delivered;
}
else
{
Console.WriteLine("Order cannot be delivered in the current state.");
}
}
public void CancelOrder()
{
if (State == OrderState.New || State == OrderState.Processing)
{
Console.WriteLine("Canceling order...");
State = OrderState.Canceled;
}
else
{
Console.WriteLine("Order cannot be canceled in the current state.");
}
}
}
C#Program.cs
Console.WriteLine("Hello, Day3!");
var order = new Order();
order.ProcessOrder();
order.ShipOrder();
order.DeliverOrder();
order.CancelOrder();
Console.WriteLine($"Final order state: {order.State}");
C#The beauty of this code lies in:
- 명확한 상태 전환 방법:
ProcessOrder, ShipOrder, DeliverOrder 및 CancelOrder 메서드는 각 상태에 대해 명확하게 구현됩니다. 이러한 가독성은 코드를 아름답게 만듭니다. - 단일 책임 원칙:
Order 클래스는 단일 책임 원칙을 준수하면서 주문 상태 관리에만 중점을 둡니다. - 효과적인 열거형 사용:
OrderState 열거형은 주문 상태를 간결하게 나타내므로 코드 가독성이 향상됩니다.