Come le persone strutturano il loro codice quando usano la libreria stateless C#?Libreria macchine con stato stateless - modo appropriato per strutturare?
https://github.com/nblumhardt/stateless
Sono particolarmente interessato a come questo si lega con dipendenze iniettati, e un corretto approccio di responsabilità e stratificazione in modo corretto.
mio attuale struttura prevede:
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);
}
}
Dovremmo implementare tutti i processi (chiamata ai servizi) all'interno del gancio OnEntry, o implementare i processi all'esterno dopo la transizione di stato è stato verificato che è permesso di avere luogo? Mi chiedo come fare la gestione delle transazioni in caso affermativo.
Immagino che quello che sto cercando sia una guida migliore da parte di coloro che hanno già implementato qualcosa usando gli apolidi e come avvicinarsi alla struttura del codice.
Considerando questo aspetto, mi sto orientando verso l'utilizzo di uno stabilimento immesso nei servizi di dominio per costruire l'oggetto del flusso di lavoro e questo può passare nei servizi richiesti dall'oggetto del flusso di lavoro. – dandcg
Ancora guardando alcune linee guida sull'approccio migliore all'uso della macchina a stati. Suppongo di dover chiamare un metodo su un servizio di posta elettronica di invio che esiste per tutta la durata della richiesta web. Se questa chiamata dovesse andare all'interno di OnEntry o all'interno del metodo pubblico. Se è nella OnEntry cosa succede se c'è un problema durante la transizione? Alcuni consigli da persone che hanno implementato il codice utilizzando gli apolidi e dove hanno inserito il codice di esecuzione effettivo sarebbero molto apprezzati. – dandcg