Будет ли это рассматриваться как злоупотребление паттерном автомата? - PullRequest
0 голосов
/ 26 августа 2018

Мне нужен некоторый тип объекта, который представляет состояние рабочего процесса, где рабочий процесс устанавливает определенные значения, но не в определенном порядке. Я улучшаю состояние, используя флаги перечисления, например

[Flags]
public enum MyState
{
    None = 0,
    FooSet = 1,
    BarSet = 2
}

public class MyStateMachine
{
    public MyState State { get; private set; }

    public bool Completed
    {
        get
        {
            return State == Enum.GetValues(typeof(MyState))
                .Cast<MyState>()
                .Aggregate(MyState.None, (prev, cur) => prev | cur);
        }
    }

    public string Foo
    {
        get
        {
            return foo; 
        }
        set
        {
            foo = value;
            State |= MyState.FooSet;
        }
    }

    private string foo;

    public string Bar
    {
        get
        {
            return bar; 
        }
        set
        {
            bar = value;
            State |= MyState.BarSet;
        }       
    }

    private string bar;

    public MyStateMachine()
    {
        State = MyState.None;
        foo = null;
        bar = null;
    }

}

Это анти-паттерн? Злоупотребление паттерном государственной машины? Злоупотребление флагами? Если да, то какой правильный шаблон я ищу?

...