Если вы не хотите использовать фундамент Workflow, вы можете создать свой рабочий процесс как реализацию шаблона состояния GOF.
Простая реализация:
public class Workflow
{
internal IState Current { get; set; }
public void Start()
{
Current = new StartState();
Current.Start(this);
}
public void DoSomething()
{
Current.DoSomething(this);
}
public void DoSomethingElse()
{
Current.DoSomethingElse(this);
}
}
public interface IState
{
Start(Workflow context);
DoSomething(Workflow context);
DoSeomethingElse(Workflow context);
}
public abstract BaseState : IState
{
public virtual void Start(Workflow context)
{
throw new InvalidStateOperationException();
}
public virtual void DoSomething(Workflow context)
{
throw new InvalidStateOperationException();
}
public virtual void DoSomethingElse(Workflow context)
{
throw new InvalidStateOperationException();
}
}
public class StartState : BaseState
{
public override void Start(Worklfow context)
{
// Do something
context.Current = new OtherState();
}
}
Это просто базовая реализация.Вы можете продлить его.Вы можете добавить другой набор методов, например CanDoSomething, вы можете поддерживать коллекцию созданных экземпляров State, поскольку экземпляр State не имеет состояния, поэтому вам не нужно создавать новый экземпляр каждый раз, когда вы переходите в состояние и т. Д.