W jaki sposób ludzie budują swój kod podczas korzystania z biblioteki bezpaństwowej C#?Biblioteka maszyn stanu bezstanowego - właściwy sposób na strukturę?
https://github.com/nblumhardt/stateless
Jestem szczególnie zainteresowany w jaki sposób ten wiąże się z wstrzyknięto zależności i prawidłowe podejście do obowiązków i warstw poprawnie.
Moja obecna struktura obejmuje następujące elementy:
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);
}
}
powinniśmy realizować wszystkie procesy (wezwanie do usług) w haku OnEntry lub wdrożyć procesy na zewnątrz po przejściu stan został zweryfikowany, że jest może się odbyć? Zastanawiam się, jak zrobić zarządzanie transakcjami, jeśli tak.
Podejrzewam, że to, czego szukam, to najlepsze wskazówki od tych, którzy już wdrożyli coś za pomocą bezpaństwowców i jak podejść do struktury kodu.
Patrząc na to nieco, pochylam się nad wykorzystaniem fabryki wstrzykniętej do usług domenowych do skonstruowania obiektu przepływu pracy, który może przekazywać usługi wymagane przez obiekt przepływu pracy. – dandcg
Nadal poszukuje wskazówek na temat najlepszego podejścia do korzystania z automatu stanów. Załóżmy, że muszę wywołać metodę w usłudze wysyłania wiadomości e-mail, która istnieje przez cały czas trwania żądania internetowego. Powinno to być połączenie w ramach OnEntry lub w metodzie publicznej. Jeśli jest w OnEntry, co się stanie, jeśli wystąpi problem podczas przejścia? Niektóre wskazówki od ludzi, którzy mają zaimplementowanie kodu za pomocą bezpaństwowców i gdzie umieścili kod rzeczywistego działania, byłyby bardzo mile widziane. – dandcg