Day 3 – Finite State Machine (FSM)

This example demonstrates an FSM for order processing, showcasing a clean and clear implementation.

이번에는 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 열거형은 주문 상태를 간결하게 나타내므로 코드 가독성이 향상됩니다.

Links

Leave a Reply

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다