Мне нужен некоторый тип объекта, который представляет состояние рабочего процесса, где рабочий процесс устанавливает определенные значения, но не в определенном порядке. Я улучшаю состояние, используя флаги перечисления, например
[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;
}
}
Это анти-паттерн? Злоупотребление паттерном государственной машины? Злоупотребление флагами? Если да, то какой правильный шаблон я ищу?