C# ステートレス ライブラリを使用する場合、人々はコードをどのように構成しますか?
https://github.com/nblumhardt/stateless
これが注入された依存関係とどのように結びついているか、責任と階層化の正しいアプローチに特に興味があります。
私の現在の構造は次のとおりです。
public class AccountWf
{
private readonly AspNetUser aspNetUser;
private enum State { Unverified, VerificationRequestSent, Verfied, Registered }
private enum Trigger { VerificationRequest, VerificationComplete, RegistrationComplete }
private readonly StateMachine<State, Trigger> machine;
public AccountWf(AspNetUser aspNetUser, AccountWfService userAccountWfService)
{
this.aspNetUser = aspNetUser;
if (aspNetUser.WorkflowState == null)
{
aspNetUser.WorkflowState = State.Unverified.ToString();
}
machine = new StateMachine<State, Trigger>(
() => (State)Enum.Parse(typeof(State), aspNetUser.WorkflowState),
s => aspNetUser.WorkflowState = s.ToString()
);
machine.Configure(State.Unverified)
.Permit(Trigger.VerificationRequest, State.VerificationRequestSent);
machine.Configure(State.VerificationRequestSent)
.OnEntry(() => userAccountWfService.SendVerificationRequest(aspNetUser))
.PermitReentry(Trigger.VerificationRequest)
.Permit(Trigger.VerificationComplete, State.Verfied);
machine.Configure(State.Verfied)
.Permit(Trigger.RegistrationComplete, State.Registered);
}
public void VerificationRequest()
{
machine.Fire(Trigger.VerificationRequest);
}
public void VerificationComplete()
{
machine.Fire(Trigger.VerificationComplete);
}
public void RegistrationComplete()
{
machine.Fire(Trigger.RegistrationComplete);
}
}
OnEntry フック内ですべてのプロセス (サービスへの呼び出し) を実装する必要がありますか、それとも、状態遷移が許可されていることが確認された後に、外部でプロセスを実装する必要がありますか? もしそうなら、トランザクション管理をどのように行うのだろうか。
私が求めているのは、ステートレスを使用して何かを既に実装している人からの最良のガイダンスと、コード構造へのアプローチ方法だと思います。