Wie strukturieren Benutzer ihren Code bei der Verwendung der statusfreien C# -Bibliothek?Zustandslose Maschinenbibliothek - geeignete Struktur?
https://github.com/nblumhardt/stateless
Ich bin besonders daran interessiert, wie diese Beziehungen mit injizierten Abhängigkeiten und ein richtiger Ansatz von Verantwortlichkeiten und richtig Schichtung.
Meine aktuelle Struktur beinhaltet die folgenden:
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);
}
}
Sollten wir alle Prozesse implementieren (auf Dienste nennen) innerhalb des OnEntry Haken oder die Prozesse auf der Außenseite implementieren, nachdem der Zustandsübergang überprüft wurde, dass es darf stattfinden? Ich frage mich, wie man das Transaktionsmanagement tut, wenn es so ist.
Ich denke, was ich suche, ist die beste Anleitung von denen, die bereits etwas mit Stateless implementiert haben und wie man sich der Code-Struktur nähert.
Mit Blick auf diese mehr Ich bin in Richtung auf die Verwendung einer Fabrik in die Domain-Services injiziert, um das Workflow-Objekt zu konstruieren und dies kann die Dienste von den Workflow-Objekt übergeben. – dandcg
Immer noch einige Hinweise auf den besten Ansatz der Verwendung der Zustandsmaschine. Angenommen, ich muss eine Methode für einen Sende-E-Mail-Dienst aufrufen, der für die Lebensdauer der Webanforderung existiert. Sollte dieser Aufruf innerhalb des OnEntry oder innerhalb der public Methode erfolgen? Wenn es im OnEntry ist, was passiert, wenn während des Übergangs ein Problem auftritt? Einige Hinweise von Menschen, die Code mit Stateless implementiert haben und wo sie den eigentlichen Code platziert haben, würden sehr geschätzt werden. – dandcg