Programování
State
Přesnunout logiku, která je uvnitř toho objektu, zavislá na tom stavu, tak jí vyčlenit do samostatného objektu toho stavu.

Špatné zapsání:
    
public class Car
{
    public string Rotation { get; set; } = "Left";

    public void Draw()
    {
        if (Rotation == "left")
        {
            Console.WriteLine("left");
        }else if (Rotation == "right")
        {
            Console.WriteLine("right");
        }
        else if (Rotation == "up")
        {
            Console.WriteLine("up");
        }
        else if (Rotation == "down")
        {
            Console.WriteLine("down");
        }
    }
}
    
Dobré zápsání:
    
    public class Car
    {
        public IRotation Rotation { get; set; } = new LeftRotation();

        public void Draw()
        {
            this.Rotation.Draw();
        }
    }

    public interface IRotation
    {
        public void Draw();
    }

    public class UpRotation : IRotation
    {
        public void Draw()
        {
            Console.WriteLine("up");
        }
    }
    public class LeftRotation : IRotation
    {
        public void Draw()
        {
            Console.WriteLine("left");
        }
    }
    public class RightRotation : IRotation
    {
        public void Draw()
        {
            Console.WriteLine("right");
        }
    }
    public class DownRotation : IRotation
    {
        public void Draw()
        {
            Console.WriteLine("down");
        }
    }